C语言深度剖析--读书笔记3_sizeof

来源:互联网 发布:macbook air安装软件 编辑:程序博客网 时间:2024/06/06 14:18

sizeof 函数/关键字

1:sizeof作为关键字的操作

int i,r;r=sizeof i;//注意,这里sizeof后面没有括号。所以说sizeof有点像关键字printf("r is %d\n",r);


打印结果:4

2:sizeof作为函数的操作

int p=10;int r=0;r=sizeof(int)*p;//sizeof(int) 计算int类型的长度:4(单位字节)                  //sizeof(int)*p 等价于 {sizeof(int)} * p,即计算"int长度"和"p的值"的乘积printf("r is %d\n",r);


打印结果:40

3:sizeof运算:指针,指针指向的值

double *p=NULL;printf("sizeof(p) is %d\n",sizeof(p));//sizeof的运算对象:p,作为一个指针。                                            //无论何种类型的指针,其大小均为4字节printf("sizeof(*p) is %d\n",sizeof(*p)); //sizeof的运算对象:*p,是一个double类型变量。                                                //长8个字节,所以打印出结果为:8

打印结果:

4

8

4:sizeof运算:数组,数组的元素,的对象

int a[100];printf("sizeof(a) is %d\n",sizeof(a));//a是数组名,sizeof(数组名)=整个数组的大小                                            //编译器在处理sizeof(a)的时候,发现a是一个数组,就计算出该数组的长度:4*100printf("sizeof(&a) is %d\n",sizeof(&a));//&a是指向数组的地址,sizeof (地址),相当于sizeof(一个指针),所以返回:4printf("sizeof(&a[0]) is %d\n",sizeof(&a[0]));//&a[0]是a数组中第一个元素的地址,sizeof(地址),返回值同上printf("sizeof(a[100]) is %d\n",sizeof(a[100]));//计算数组a中,第100个元素的大小,int类型长度为 4


打印结果:

400

4

4

4

这里有一点值得注意

如果用printf打印出来:a&a&a[0],它们都是数组a的始址。但是在sizeof运算下,结果却不同

5:补充

void fun(int b[100]){printf("sizeof(b) is %d\n",sizeof(b));}int main(){int a[100];fun(a); //传参时,传递的是数组的头指针。故打印结果为4,而不是400}


打印结果:

4


 

原创粉丝点击