当前位置: 首页 > 知识库问答 >
问题:

sizeof字符指针混淆[重复]

章承
2023-03-14
#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; 
}

问题1。数组名不是指向数组开头的指针吗??如果是这样,那么为什么sizeof运算符在上述代码中计算为两个不同的值。

i、 e为什么sizeof c产生8,而sizeof r产生12,即使它们都指向一个字符。

为什么在第二种情况下打印数组的大小?

这个问题看起来像是这个问题的复制品,但它不能回答我的问题。

共有2个答案

张嘉
2023-03-14

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

吕志诚
2023-03-14

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

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

 类似资料:
  • 我已经运行这个程序好几次了,每次最后打印的p和g的值都是一样的。我不太确定为什么会这样——malloc不能在理论上选择内存中的任何位置让p和g指向吗?为什么p 8总是等于g?如果能澄清,将不胜感激。 谢谢

  • 我当时在做一个计算机科学测试,并尝试了这个问题。 据我所知,我认为打印输出是假的,因为据我所知,字符串只能与。等于()。但我弄错了。它说答案是假的,是真的。有人能解释一下原因吗?

  • 在下面的结构中,数组与指向字符的指针相比有什么好处: 或 我看到的一个优点是,使用更容易区分“未提供字符串”和“提供空字符串”,而且它比数组占用更少的空间。 此外,在这两种情况下,我可以初始化: 另一方面,我不能轻易地在上使用,它必须是分配内存上的有效指针。 那么,还有什么好处呢?

  • 主要内容:到底使用字符数组还是字符串常量C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在《 C语言字符数组和字符串》中已经进行了详细讲解,这里不妨再来演示一下: 运行结果: https://www.xnip.cn https://www.xnip.cn 字符数组归根结底还是一个数组,上节讲到的关于 指针和数组的规则同样也适用于字符数组。更改上面的代码,使用指针的方式来输出字符串: 运行结果: https://ww

  • 我们正在使用dexguard,并且在dexguard项目中还具有以下设置。文本 我还尝试了提供res/值/字符串的变体。类似xml的: 和 等 在小路上。但字符串的键值正在变得模糊。 正在返回0。(其中key是字符串值)。 我也试过了 避免字符串OBF指令的正确方法是什么?

  • 我尝试了以下代码,但不理解输出: 输出:字符串 为什么? 感谢您的关注!