sizeof(a) / sizeof(*(a))意义及效果
时间: 2023-09-29 19:11:12 浏览: 122
这个表达式的意义是计算一个数组中元素的个数。其中,`a`表示数组名称,`sizeof(a)`表示整个数组所占内存空间的大小,`sizeof(*(a))`表示数组中每个元素所占内存空间的大小。所以,通过`sizeof(a) / sizeof(*(a))`可以得到数组中元素的个数。
这个表达式的效果是在编译时计算数组中元素的个数,并将其作为一个常量进行替换。因此,这个表达式可以被用于定义数组的长度或在循环中控制迭代次数等需要使用数组长度的场合。需要注意的是,只有在定义数组时才能使用这个表达式,因为只有在编译时才能计算出数组中元素的个数。
相关问题
#include <stdio.h> int main () { char * a2,**b2,*c2[4], (*d2)[5]; double * a3,**b3,*c3[4], (*d3)[5]; float * a4,**b4,*c4[4], (*d4)[5]; /*****输出a2,b2,c2,d2所占内存的字节数*****/ /********** Begin *********/ /********** End **********/ /*****输出a3,b3,c3,d3所占内存的字节数*****/ /********** Begin *********/ /********** End **********/ /*****输出a4,b4,c4,d4所占内存的字节数*****/ /********** Begin *********/ /********** End **********/ return 0;
```
#include <stdio.h>
int main () {
char * a2,**b2,*c2[4], (*d2)[5];
double * a3,**b3,*c3[4], (*d3)[5];
float * a4,**b4,*c4[4], (*d4)[5];
/*****输出a2,b2,c2,d2所占内存的字节数*****/
printf("a2所占内存的字节数为:%d\n", sizeof(a2));
printf("b2所占内存的字节数为:%d\n", sizeof(b2));
printf("c2所占内存的字节数为:%d\n", sizeof(c2));
printf("d2所占内存的字节数为:%d\n", sizeof(d2));
/*****输出a3,b3,c3,d3所占内存的字节数*****/
printf("a3所占内存的字节数为:%d\n", sizeof(a3));
printf("b3所占内存的字节数为:%d\n", sizeof(b3));
printf("c3所占内存的字节数为:%d\n", sizeof(c3));
printf("d3所占内存的字节数为:%d\n", sizeof(d3));
/*****输出a4,b4,c4,d4所占内存的字节数*****/
printf("a4所占内存的字节数为:%d\n", sizeof(a4));
printf("b4所占内存的字节数为:%d\n", sizeof(b4));
printf("c4所占内存的字节数为:%d\n", sizeof(c4));
printf("d4所占内存的字节数为:%d\n", sizeof(d4));
return 0;
}
```
解释:使用sizeof操作符计算不同类型的指针所占内存的字节数。其中,a2,b2,c2,d2是char类型的指针;a3,b3,c3,d3是double类型的指针;a4,b4,c4,d4是float类型的指针。根据操作系统和编译器不同,不同类型的指针所占内存的字节数可能不同。通常,指针变量在32位系统下占4个字节,在64位系统下占8个字节。
sizeof(p)/sizeof(*p)
sizeof(p)/sizeof(*p)是一个C语言中常见的用法,用于计算一个数组的元素个数。其中p为指向数组的指针。
sizeof(p)表示指针p所占用的字节大小,sizeof(*p)表示指针p所指向的对象所占用的字节大小。通常情况下,这两个值相等。
通过sizeof(p)/sizeof(*p)的计算,可以得到数组的元素个数。这是因为数组在内存中是连续存储的,而指针p指向数组的首地址。所以,sizeof(p)/sizeof(*p)实际上是计算数组的总字节大小除以每个元素所占用的字节大小,从而得到数组的元素个数。
举个例子,如果有一个数组int arr[5],则sizeof(p)的值为4或8(根据编译器不同而定),sizeof(*p)的值为4。所以,sizeof(p)/sizeof(*p)的结果为5,即数组arr中元素的个数。
需要注意的是,sizeof(p)/sizeof(*p)只适用于静态数组,对于动态数组或者指向动态分配内存的指针,无法使用此方法来计算元素个数。此时需要通过其他方式来记录或者传递数组的长度信息。
阅读全文