一道常见的C语言面试题
char str[] = “Hello”;
char *p = str;
求sizeof(str)与sizeof(p)
初看我们可能会认为两个都是6,但实际的答案是
sizeof(str):6
sizeof(p):4
学过一段时间C后,经常会把数组与指针混淆:
1、 输出字符串时,数组的首地址和指针作用相同
2、 对数组进行操作时,同样可以用相应的指针进行操作
扫描二维码关注公众号,回复:
545516 查看本文章
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]。