【问题标题】:sizeof character pointer confusion [duplicate]sizeof字符指针混淆[重复]
【发布时间】:2018-04-21 22:39:10
【问题描述】:
#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 的重复,但它没有回答我的问题。

【问题讨论】:

  • @DietmarKühl 我认为您提供的副本有所帮助。谢谢!

标签: c++ c arrays pointers


【解决方案1】:

在许多情况下,数组衰减为指向第一个元素的指针。但是对于sizeof 运算符,情况不是。它可以区分数组和指针并给出正确的值。由于c 是指向char 的指针,因此您得到的值是指针的大小。 c 包含r 的第一个元素的地址这一事实并不重要。

此外,sizeof 运算符的值是在编译时计算的,因此变量可能具有的任何值都与sizeof 无关。唯一的例外是 C 中的可变长度数组。

【讨论】:

  • "sizeof 运算符的值是在编译时计算的,因此变量可能具有的任何值都与 sizeof 无关" 这完美地解释了为什么 sizeof(c) 会打印 1 而不管其指向的值至,但你能进一步解释为什么 sizeof(r) 的计算结果为 12。谢谢!
【解决方案2】:

sizeof c 报告的是 指针 的大小,而不是它所指向的大小(您在一个具有 64 位指针的系统上,因此容纳指针的大小为 8)。即使sizeof *c 也无济于事,因为指针指向r 的第一个元素,而不是“数组”,所以sizeof *c 只会报告与sizeof r[0] 相同的内容,即1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多