数组名和指针的区别(小结)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Win 32 中:
1. (1) 对数组名进行sizeof运算时,结果是整个数组占用空间的大小;
(2) 但是数组作为函数参数时,对数组名进sizeof 运算,结果为4;
(2) 对指针进行sizeof运算得到的值是编译器分配给指针(也就是一个地址)的内存空间,即为4。
2. (1) 对数组名作&运算,得到的还是数组第一个元素的地址;
(2) 对指针取地址时得到的结果是指针所在的地址,也就是指向这个指针的指针,与指针的值不同。
BOOL mytest(char param[100])
{
//参数数组名:paramBytes
int paramBytes = sizeof(param);
printf("paramBytes \t%d\n",paramBytes);
//数组:mych1[]
char mych1[] = "abcdefg123"; //若定义为mych1[100]
int mych1Bytes = sizeof(mych1);
printf("mych1Bytes \t%d\n",mych1Bytes);//输出:100
//数组:mych[200]
char mych[200] = {0};
int myBytes = sizeof(mych);
printf("myBytes \t%d\n",myBytes);
printf("---addr \t%d\n",mych);
printf("---addr \t%d\n",&mych);
//指针:pch
char* pch = "12345abc";
int pchBytes = sizeof(pch);
printf("pchBytes \t%d\n",pchBytes);
//pch = mych;
printf("---addr \t%d\n",pch);
printf("---addr \t%d\n",&pch);
return TRUE;
}
运行: