c - 指针运算的奇怪结果

标签 c pointers

我写了下面的程序来理解指针运算。第二个输出看起来很奇怪,因为指针 'cp' 被声明为 const char **。如果没有任何转换,我希望它在我这样做时递增“1” (cp + 1) 而不是输出显示的 '8'

#include <stdio.h>

typedef const char uint8_t;

const char *c = "hello";
const char **cp = &c;
const char ***cpp = &cp;
const char ****cppp = &cpp;

int main() {

        printf(" cp     %p     (cp + 1)   %p \n",(int*)cp, ((int*)cp)+1 );
        printf(" cp     %p     (cp + 1)   %p \n", cp, (cp + 1));
        printf(" cp     %p     (cp + 1)   %p \n", (uint8_t*)cp, ((uint8_t*)cp) + 1);

        return 0;
}


 cp     0x601020     (cp + 1)   0x601024 
 cp     0x601020     (cp + 1)   0x601028 
 cp     0x601020     (cp + 1)   0x601021 

最佳答案

Without any casting I would expect [const char **] to increment by '1' when I do (cp + 1) instead of '8' as the output shows.

否 - 指向指针的指针会增加指针的大小,在您的系统上为 8。

关于c - 指针运算的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182561/

相关文章:

c - c中数组的相等性

c - 函数和参数给出错误

c - 免费通话时段错误

c - 数组/数组名不是总是指向 C 中第一个元素的指针吗?

c - 在 C 语言中,有没有办法让任意函数超时?

c - 奇怪的指针问题

c - 指针指向指针,如何获取值?

c - "called object is not a function"错误 - C

c - 指向将指向另一个函数的指针作为参数的函数的指针

c - 节点->指针=指针与使用memcpy的节点->指针