今天下午看了《C指針編程之道》看到第65頁的例4-2,看到結果和自己想的不一樣,突然有點懵了。。。久了沒復習指針都忘了。。今晚又自己寫一個程序實驗,才 理順思路,整明白。。。 寫個日志留作日后復習。


試驗程序。。。
#include "stdafx.h"
int main(int argc, char* argv[])
{
char *name[] = {"I love", "i like", "L Test"};
char **Pna;
char *dp;
puts("數組形式");
printf("%p(name[0]變量的地址)→%p(字符串的地址)→%s(里面的內容) \n", &name[0], name[0], name[0]);
printf("%p(name[1]變量的地址)→%p(字符串的地址)→%s(里面的內容) \n", &name[1], name[1], name[1]);
printf("%p(name[2]變量的地址)→%p(字符串的地址)→%s(里面的內容) \n", &name[2], name[2], name[2]);
puts("");
puts("指針的指針形式");
Pna = &name[0];// Pna:取變量變量自身所在的地址。*Pan取變量存儲的地址。&Pna取指針自身的地址
printf("%p(name[0]變量的地址) → %p(字符串的地址) → %c → %p(指針Add)\n", Pna, *Pna, **Pna, &Pna);
Pna = &name[1];// Pna:取變量變量自身所在的地址。*Pan取變量存儲的地址。&Pna取指針自身的地址
printf("%p(name[1]變量的地址) → %p(字符串的地址) → %c → %p(指針Add)\n", Pna, *Pna, **Pna, &Pna);
Pna = &name[2];// Pna:取變量變量自身所在的地址。*Pan取變量存儲的地址。&Pna取指針自身的地址
printf("%p(name[2]變量的地址) → %p(字符串的地址) → %c → %p(指針Add)\n", Pna, *Pna, **Pna, &Pna);
puts("");
//Pna 中存放著變量自身所在的地址 變量自身的地址中存放著字符串所在的地址 字符串所在的地址中放著字符串
//Pna 取變量變量自身所在的地址 %p 輸出地址
//*Pna取變量所存儲的字符串地址 %p 字符串首地址 %s 直接輸出字符串
//**Pna則直接得到字符串中某一個字符 %c打印字符
puts("指針的形式");
dp = name[0];// dp:取變量存儲的地址。
printf("%p(字符串的地址) = %s(里面的內容) = %c\n", dp, dp, *dp);
dp = name[1];// dp:取變量存儲的地址。
printf("%p(字符串的地址) = %s(里面的內容) = %c\n", dp, dp, *dp);
dp = name[2];// dp:取變量存儲的地址。
printf("%p(字符串的地址) = %s(里面的內容) = %c\n", dp, dp, *dp);
puts("");
//指針能取:1、指針自身地址。2、變量所存儲的地址和內容
//指針的指針能取:1、指針自身的地址。2、變量自身的地址。3、變量所存儲的地址和內容
//結論:指針只能取變量所存儲的地址和內容,而指針的指針則能取變量自身的地址和所存儲的地址和內容
puts("");
return 0;
}
輸出的內容:
數組形式
0012FF74(name[0]變量的地址)→0042224C(字符串的地址)→I love(里面的內容)
0012FF78(name[1]變量的地址)→00422244(字符串的地址)→i like(里面的內容)
0012FF7C(name[2]變量的地址)→0042223C(字符串的地址)→L Test(里面的內容)
指針的指針形式
0012FF74(name[0]變量的地址) → 0042224C(字符串的地址) → I → 0012FF70(指針Add)
0012FF78(name[1]變量的地址) → 00422244(字符串的地址) → i → 0012FF70(指針Add)
0012FF7C(name[2]變量的地址) → 0042223C(字符串的地址) → L → 0012FF70(指針Add)
指針的形式
0042224C(字符串的地址) = I love(里面的內容) = I
00422244(字符串的地址) = i like(里面的內容) = i
0042223C(字符串的地址) = L Test(里面的內容) = L
Press any key to continue
|