#include <stdio.h>
const char *c = "hello";
const char *cp = (unsigned char*)&c;
const char *cpp = (unsigned char*)&cp;
int main(){
printf("PTR c %p \n",c);
printf("PTR cp %p \n",cp);
printf("PTR cpp %p \n",cpp);
printf("\n\n");
printf("CONTENTS cp 0x%x \n",*(unsigned int*)cp);
printf("CONTENTS cpp 0x%x \n",*(unsigned int*)cpp);
printf(" \n\n Demonstrating pointer arithmetic. \n\n");
printf("PTR c %p \n ",c);
printf("PTR (c+1) %p \n ",(c+1));
printf("PTR c %p \n ",(unsigned int*)c);
printf("PTR (c+1) %p \n ",(unsigned int*)(c+1));
printf("PTR c %p \n ",(unsigned long*)c);
printf("PTR (c+1) %p \n ",(unsigned long*)(c+1));
return 0;
}
該程序的輸出如下試圖瞭解指針運算
PTR c 0x4007a0
PTR cp 0x601028
PTR cpp 0x601030
CONTENTS cp 0x4007a0
CONTENTS cpp 0x601028
Demonstrating pointer arithmetic.
PTR c 0x4007a0
PTR (c+1) 0x4007a1
PTR c 0x4007a0
PTR (c+1) 0x4007a1
PTR c 0x4007a0
PTR (c+1) 0x4007a1
給出如果你看一下部分演示指針運算,我希望下面的結果
1)第一兩行打印「字符指針」一個地址,因此差異應該是'1' - 這就是我們正在得到的
2)接下來的兩行打印'int指針'一個地址除此之外,因此差異應該是'4' - 什麼樣的錯誤?
3)接下來的兩行打印'長指針'一個地址分開,因此差異應該是'4/8' - 什麼樣的錯誤?
當你'&C'你得到一個指向'C',所以'&C '是一個指向'const char'的指針。 –
我認爲你在鑄造之前遞增 –
這段代碼絕對是瘋了。 'const char * cpp =(unsigned char *)&cp;'讓_no感覺不到。 –