我写了下面的程序来理解指针运算。第二个输出看起来很奇怪,因为指针 '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/