#include<iostream>
using namespace std;
int main(){
double a;
double b[10];
char *c;
char r[12]="appleeeeeee";
c=r;
cout<<sizeof c<<endl; //Why is this 8 and not equal to 12 i.e sizeof(r)
cout<<sizeof r;
}
Q1。不是数组名称是指向数组开头的指针吗?如果是这样,那么为什么sizeof运算符在上面的代码中计算为两个不同的值。
,为什么sizeof c
得到8而sizeof r
得到12,即使它们都是指向一个字符的指针。
为什么在第二种情况下打印数组r[12]
的大小?
这个问题可能看起来像this的副本,但它没有回答我的问题。
答案 0 :(得分:1)
在许多情况下,数组衰减到指向第一个元素的指针。对于sizeof
运算符,情况不。它可以区分数组和指针,并给出正确的值。由于c
是指向char
的指针,因此您获得的值是指针的大小。 c
包含r
的第一个元素的地址这一事实并不重要。
此外,sizeof
运算符的值是在编译时计算的,因此变量可能具有的值与sizeof
无关。唯一的例外是C中的可变长度数组。
答案 1 :(得分:1)
sizeof c
报告的是指针的大小,而不是它所指向的大小(你在具有64位指针的系统上,因此大小为8来保存指针)。即使sizeof *c
也不会有帮助,因为指针指的是r
的第一个元素,而不是&#34;数组&#34;,所以sizeof *c
只报告相同的作为sizeof r[0]
的东西,即1
。