2、以下为linux下的32位C程序,计算sizeof的值

char str[] = "Hello";
char *p = str;
int n = 10;

请计算:(1)sizeof(str)
(2)sizeof(p)
(3)sizeof(n)

(4)

void Func (char str[100])
{
	..........;
}

计算sizeof(str)=
(5)

void *p = malloc(100);

计算sizeof(p)=

标准答案:(1)6 //把’\0’也包含进去了
(2)4
(3)4
(4)4
(5)4
(6)4

  • 因为p是一指针,32位下的所有指针都是4字节,sizeof(p)为4而不是6俗称数组退化为指针,因为sizeof是个静态操作符,编译时期就可以确定值,而固定的数组的长度在编译期间也是确定了的,所以sizeof(str)能给出6,但p是个指针,在编译期间,sizeof不知道p指向一个数组,还是仅指向一个元素,所以其指向位置的数组大小是确定不了的,所以给出sizeof(p)
    = 4,和sizeof(int),sizeof(double)是一个道理。

  • sizeof(p)去的是一个指针的地址长度而一个字符指针一般只占4个字节的长度.p是p指的地址所以输出是4,*p是指数组str,如果是b=sizeof(*p);才输出是6。

  • (4)中的sizeof(str),str作为函数参数,在函数里,数组str作为参数传进来,在函数内部str是指针的形式。sizeof(str)=4

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐