32位C程序,sizeof()的数组与指针的区别

一道常见的C语言面试题

char str[] = “Hello”;

char *p = str;

求sizeof(str)与sizeof(p)

初看我们可能会认为两个都是6,但实际的答案是

sizeof(str):6

sizeof(p):4

学过一段时间C后,经常会把数组与指针混淆:

1、 输出字符串时,数组的首地址和指针作用相同

2、 对数组进行操作时,同样可以用相应的指针进行操作

3、 自定义函数的参数传递时,数组与指针的作用类似

但数组str[]与指针p的在内存的位置不同,来看下面的实例

#include<stdio.h>
int main(){
	char str[]="hello";
	char *p=str;
	int n=10;
	printf("str:%p\n",str);
	printf("str:%p\n",str+1);
	printf("p:%p\n",p);
	printf("p:%p\n",p+1);
	printf("&str:%p\n",&str);
	printf("&str+1:%p\n",&str+1);
	printf("&p:%p\n",&p);
	printf("&p+1:%p\n",&p+1);
	return 0;

}

运行后进行调试

      指针p储存的是str[]数组的首地址,是4个字节的,sizeof(p)可以理解为sizeof(char *);而数组str[]是在这个地址上的储存字符串,实际的值长6个字节,str是这个数组的标识符,sizeof(str)可以理解为数组的大小str[5]。





猜你喜欢

转载自blog.csdn.net/qq_25188995/article/details/79641715
今日推荐