我编写了下面的程序来理解指针运算。第二个输出看起来很奇怪,因为指针'cp'
被声明为const char **
。如果没有任何投射,我认为当我做(cp + 1)
而不是'8'
时,它会增加'1',如输出所示。指针运算的奇怪结果
#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
我对你的回答的第一部分,第二部分是模糊和不明确的同意递增。 – liv2hak