今天下午看了《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
|