关于C/C++中指针和数组的sizeof(p)的问题
#include<cstdio>
void A(char p[10]){
printf("%d\n",sizeof(p) );// 4
}
int main()
{
//char *p = NULL; // 4
//char *p = "Hello";// 4
// char *p[] = { "Hello", "World" };// 8
// char p[] = "Hello"; //6
// char p[10] = "Hello";//10
// char p[10];
// A(p);
int **p[3][4];//48
printf("%d\n",sizeof(p) );
return 0;
}
每一行注释后面的数字是相应的sizeof(p)之后得到的结果,这里解释一下。
当P充当指针的时候,不管是什么指针,都是4个字节(一般是32位操作系统?这里小伙伴们自己去查一下,64位的好像是8个字节)。
char *p = “Hello”;这个sizeof(p);我错了好几次,但是这里P只是一个指针,指向了一个地址,那个地址存了一个字符串叫做“hello”的东西,而这个地址本身是6个字节大小(包括‘\0’哟)。
函数那个void A(char p[10]){
printf("%d\n",sizeof§ );// 4
}
这里也是传过去的是指针,表示我临时的p指针指向那个数组的首地址,本质上sizeof还是计算我指针的大小。
sizeof什么时候计算的是数组的大小呢?可能仅仅是当其为数组名的时候吧,比如:
//char p[] = “Hello”; //6
// char p[10] = “Hello”;//10
大致是这个意思。
还有疑问的话,参考一下这个答主的吧!
https://blog.csdn.net/weixin_47965641/article/details/106623700