gpt4 book ai didi

C - (ptr = = &ptr) 什么是*ptr?

转载 作者:太空狗 更新时间:2023-10-29 15:59:50 25 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但我对 C 指针的理解有点问题。当涉及到数组时更是如此。例如:

char ptr[100];
ptr[0]=10;

fprintf(stderr, "&ptr: %p \n ptr: %p \n*ptr: %d\n", &ptr, ptr, *ptr);

if ( &ptr == ptr ) {
fprintf(stderr, "Why?\n");
}

这怎么可能? 'ptr' 位于地址 &ptr。 ptr 的内容与 &ptr 相同。那为什么是 *ptr = 10 ???

最佳答案

数组第一个元素的地址与数组本身的地址相同。

除非它是 sizeof 或 address-of & 运算符的操作数,或者是用于在声明中初始化另一个数组的字符串文字,表达式类型“T 的 N 元素数组”将被隐式转换(“衰减”)为类型“指向 T 的指针”,值将是数组中第一个元素的地址。

如果表达式a的类型是“T的N元数组”,那么表达式&a的类型是“T的N元数组的指针”,或 T (*)[N]

给出声明

T a[N];

那么下面的都是真的:

Expression         Type        Decays to----------         ----        ---------         a         T [N]       T *        &a         T (*)[N]    n/a        *a         T           n/a

表达式 a&a 的计算结果都是相同的(数组中第一个元素的位置),但具有不同的值类型(分别为指向 T 的指针和指向 T 的数组的指针)。

关于C - (ptr = = &ptr) 什么是*ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com