C++ 数组与指针
C++中既然数组名就是指针,那么inta[10];int*b=a;sizeof(a)的结果为什么是整个数组的占用空间而sizeof(b)的结果却是指针的占用空间?...
C++中既然数组名就是指针,那么
int a[10];
int *b=a;
sizeof(a)的结果为什么是整个数组的占用空间而sizeof(b)的结果却是指针的占用空间? 展开
int a[10];
int *b=a;
sizeof(a)的结果为什么是整个数组的占用空间而sizeof(b)的结果却是指针的占用空间? 展开
4个回答
展开全部
int a[10];
这里限定长度为10个整数,所以长度为10*sizeof(int) = 40。
int *b=a;
由于b是指针,无论是否指向a,指向什么,sizeof(b)等于sizeof(int),32位平台上等于4。
以上讨论的问题引发的关于数组名称的问题:
数组名本身是个地址常量,但是某些特殊情况下它的语义可以发生改变。例如sizeof(a),这时a表示整个数组对象(这里指语法对象,不是指类的实例)而不是这个常量本身。基于这个语义,对数组名取地址也是合法的,对于数组a来说&a的结果等于a这个地址常量本身的值。这是C/C++标准委员会为了维护语法对象a作为一个左值(l-value)总可以取地址这条原则的妥协。
这里限定长度为10个整数,所以长度为10*sizeof(int) = 40。
int *b=a;
由于b是指针,无论是否指向a,指向什么,sizeof(b)等于sizeof(int),32位平台上等于4。
以上讨论的问题引发的关于数组名称的问题:
数组名本身是个地址常量,但是某些特殊情况下它的语义可以发生改变。例如sizeof(a),这时a表示整个数组对象(这里指语法对象,不是指类的实例)而不是这个常量本身。基于这个语义,对数组名取地址也是合法的,对于数组a来说&a的结果等于a这个地址常量本身的值。这是C/C++标准委员会为了维护语法对象a作为一个左值(l-value)总可以取地址这条原则的妥协。
展开全部
数组名是数组首地址,本身不是变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组和指针的概念不一样。
定义一个数组,内存就会给他分配指定的空间;
定义一个指针,内存只会分配一个存放该指针的空间,也就是说指针没有大小,有的只是存放自己的位置,该位置大小和类型有关:int char等等。
你的例子中也说明了这一点,sizeof(a)肯定就是数组的大小,因为它“申请”了10个,那内存就分给它10个;指针只是定义而已,没有要求大小,内存也不知道该给它分配多少,所以就没分配。指针指向的却是一个地址,也就是a的地址,当调用该指针时,其实就相当于调用该指针指向的地址……
sizeof(b)所以只是int的大小
定义一个数组,内存就会给他分配指定的空间;
定义一个指针,内存只会分配一个存放该指针的空间,也就是说指针没有大小,有的只是存放自己的位置,该位置大小和类型有关:int char等等。
你的例子中也说明了这一点,sizeof(a)肯定就是数组的大小,因为它“申请”了10个,那内存就分给它10个;指针只是定义而已,没有要求大小,内存也不知道该给它分配多少,所以就没分配。指针指向的却是一个地址,也就是a的地址,当调用该指针时,其实就相当于调用该指针指向的地址……
sizeof(b)所以只是int的大小
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Because you can imagine that if b refers to a,then it just links to the first term of a.....For instance,if a[10],then if *b=a,then b refers to a[1]...so sizeof(b) is just the byte of b.
If you are content with my answer ,please give me the score....Thanks
If you are content with my answer ,please give me the score....Thanks
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询