sizeof、strlen

1. sizeof 是算符,不是函数。所以下面的写法是正确的:

struct student{

    char *name;

    unsigned char age;

}

sizeof( struct student ), 或者可以说 sizeof 可以用类型做参数。

因此 sizeof 还可以用函数做参数,例:

short f();

printf(“%d\n”, sizeof( f() ));   // 输出的结果是 sizeof (short),即2.


2. 作为统计长度的方法,sizeof 与 strlen的差别,本质是一个是算符,一个是函数。因此 对大部分编译程序, 在编译的时候,就把 sizeof 计算过了,结果是类型或变量的长度。例:

char str[20] = "0123456789";

int a = strlen( str);      // a = 10;  strlen 计算字符串的长度,以结束符 0x00 为字符串结束。

int b = sizeof (str);     // b = 20  sizeof 计算的则是分配的数组 str[20]

strlen 的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。


3. 因为 sizeof 是算符 所以 sizeof 后如果是类型 必须加括弧,如 sizeof (struct student), 如果是变量名 可以不加括弧,如 sizeof str


4.在看看下面两种情况

 char *ss = "0123456789";

sizeof (ss)    //结果是 4,ss是指向字符串常量的字符指针,是一个地址,所以 sizeof(ss) 是一个地址所占的空间

sizeof (*ss)    // 结果是1, *ss是第一个字符,sizeof(*SS) 是字符所占的内存空间


5. sizeof 作为操作符,不能返回动态呗分派了的数组或外部数组的尺寸,因此在数组作为参数传给函数,同时还想在函数内知道数组大小,需要这样做

fun (unsigned char *p1, int len)    // 长度又另一个形参 len 掺进去。因为数组作为参数传给函数时,传递的是指针而不是数组,是数组的首地址。

{                                                    // fun(char [8]); fun(char []); fun ( char *),这三种写法是等价的。

    unsigned char *buf = new unsigned char[len + 1];    // 进入函数后用 memcpy 拷贝出来,长度由另一个形参传进去。

    memcpy(buf, p1, len);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值