测试程序如下:
#include<iostream>
using namespace std;
void Try(char a[])
{
cout<<"sizeof(a):"<<sizeof(a)<<endl;
cout<<a<<endl;
}
void main()
{
char str[]="Hello";
char *p=str;
char *s="Hello";
int n=10;
char b[100]={'a','b','c','d','e','f','g','h'};
cout<<"sizeof(str):"<<sizeof(str)<<endl;
cout<<&p<<endl;
cout<<"sizeof(p):"<<sizeof(p)<<endl;
cout<<"sizeof(s):"<<sizeof(s)<<endl;
cout<<"sizeof(n):"<<sizeof(n)<<endl;
Try(b);
cout<<"sizeof(b):"<<sizeof(b)<<endl;
}
结果:
sizeof(str):6
0012F518
sizeof(p):4
sizeof(s):4
sizeof(n):4
sizeof(a):4
abcdefgh
sizeof(b):100
总结:
参数a[100]里的100是个障眼的数字,其实原本可以为a[],函数调用的时候,分配了一个指针a空间,而这个指针空间的大小本身就是4个字节,同sizeof(p),sizeof(s)一样是求指针本身的内存大小,而非指向的内存的大小。
那这里有个问题就是:数组指针str和指针s的区别在哪里呢?