c语言学习day06

函数和数组都是一段连续的空间,不过函数具备三要素

函数调用实参传给形参,是值拷贝的过程,如果是指针,拷贝的是地址

值拷贝是上层调用者保护自己的空间不被修改的能力

指针是变量标识的唯一身份证

地址传递是上层调用者让下层函数修改自己空间的办法

scanf("%d",a);//a传递的不是地址,所以a不会被改变,需要写成scanf("%d",&a)

struct abc buf;

func(struct abc buf){};//结构体作为函数参数传递,在工程中基本不使用,因为太浪费内存空间,而是使用结构体指针

const char *p;//只读空间,为了让该空间只是看一看

char *p;//表明该空间可能被修改

操作一段空间的步骤:1.知道起始地址;2.判断结束标志;如果是字符空间,判断是否是0结束;如果不是字符空间,判断是否超过长度

模板:

int func(char *p)

{

    while(*p)
    {

    }

}

以下是strlen的代码

int strlen(const char *p)
{
    int i = 0;
    if(p == NULL)
    {
        return -1;
    }
    while(p[i])
    {
        i++;
    }
    return i;
}

效率最高的strlen代码跟具体的cpu有关,可能有的cpu内置的汇编指令支持strlen,就不需要我们写的c语言strlen代码了

void *是数据空间(非字符空间)的标识符

printf("%s",buf);//如果buf的内容是“00hello”,那么读到第1个字符是0,就认为结束了,所以printf的结果是什么也没有

数据(非字符)拷贝模板:

int func(int *dest,void *src,int len);

int func(void *buf,int len){
    int i = 0;
    unsigned char *tmp= (unsigned char *)buf;
    while(i<len){
        tmp[i];
        i++;
    }
]

空间的修改,参数统一用void *,如果只是单一变量,例如int short long等,参数用int *,short *,long *

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值