首页 > 学院 > 开发设计 > 正文

数组名与指针区别以及更多

2019-11-06 06:57:48
字体:
来源:转载
供稿:网友

sizeof(数组名)和sizeof(指针)

char arr[10];sizeof(arr) =10;

《C和指针》P141~142

传的是数组名,数组名不等价于地址。编译器用数组名标记数组的属性,比如具有确定数量的元素。而地址,也就是指针,只是一个标量值。只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。而只有以下两种情况,才不被当做指针常量:

sizeof(数组名):返回数组所占的字节数,不是数组元素个数,也不是指向数组的指针的长度。&数组名:产生一个指向数组的指针,而不是一个指向某个指针常量的指针。

数组名并不是完全等同于指针。虽然它们都可以通过指针方式访问数组。但是数组在作为函数参数传递过程中,会退化成指针。这也是为什么指针作为参数传递时,经常要一个长度。

加上sizeof是算符,strlen是函数。 也就说明了为什么,数组做sizeof的参数不退化,传递给strlen就退化为指针了。

借用一个前辈的test:

#include<iostream> using namespace std; void fun(int *P) { cout<<"在函数中"<<sizeof(P)<<endl; } int main() { int A[10]; int* B=new int[10]; cout<<"数组名"<<sizeof(A)<<endl; cout<<"指针"<<sizeof(B)<<endl; fun(A); }

结果输出: 数组名40 指针4 在函数中4

strlen和sizeof区别总结:传送门

char *a 与char a[] 的区别 以及内存基础:链接

最后提一下,strlen是碰到字符串结束符/0就返回,但是不包括/0的


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表