sizeof字符指针混乱

时间:2017-11-09 03:17:55

标签: c++ c arrays pointers

#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的副本,但它没有回答我的问题。

2 个答案:

答案 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