前言
现在在期末复习备考阶段,但是C语言中的指针总是有似懂非懂的感觉,每次使用总要翻找资料,索性总结下,希望对大家也有帮助!不对的地方请多多指正!
一、二维数组 二、*pt[i] 1、*pt[i]与一维char型数组 2、*pt[i]与一维int型数组 3、*pt[i]与二维数组 三、(*pt)[i]
一、二维数组
为举例方便,不妨先定义二维数组a[3][4]
以下为核心内容:
a=&a[0]
*a=a[0]=&a[0][0]
*(*a)=a[0][0]
二、*pt[i] 1、*pt[i]与一维char型数组
先不妨定义
char a[ ]={“I Love You!”,“Are you?”}
char *pt[2]={&a[0],&a[1]}
以下为核心内容:
pt=&pt[0]
当以%d输出时:*pt=pt[0]=&a[0]、**pt=a[0]
此时一定要明白a[0]是"I Love You!"的地址
当以%s输出时:*pt=pt[0]=&a[0]
输出的直接是一"I Love You!"这一字符串
**pt这一形式不存在
问:为什么当以%s输出时,*pt中存的地址,却可以输出值?
答:因为双引号(" ")默默起了以下三个作用:
1、申请空间来存放字符串
2、在字符串结尾处加上’ ’
3、返回字符串地址
这也是字符串可以赋值给字符指针的原因
2、*pt[i]与一维int型数组char *p=“I love You”;
3、*pt[i]与二维数组int a[ ]={1314 , 521}
int *pt[2]={&a[0],&a[1]}
pt=&pt[0]
*pt=pt[0]=&a[0]
**pt=a[0]
这个时候,要分为两种情况:
第一种:
先定义
int a[3][4]
int *p[3]={&a[0]、&a[1]、&a[2]}
//将二维数组行地址的地址赋给指针数组
此时有:
pt=&pt[0]
pt=pt[0]=&a[0]
**pt=(pt[0])=a[0]=&a[0][0]
***pt=a[0][0]
第二种:
先定义
int a[3][4]
int *p[3]={a[0]、a[1]、a[2]}
//将二维数组行地址赋给指针数组
此时有:
三、(*pt)[i]pt=&pt[0]=a=&a[0]
*pt=pt[0]=a[0]=&a[0][0]
**pt=a[0][0]
此时pt=a,同以上第一点关于二维数组的讲解
总结
以上就是今天要讲的内容,这些是自己翻阅资料和做题中总结出来的,可能还有不足之处,请批评指正。另外,指针也不是太难,初学者千万不能害怕而放弃,加油鸭!!!
冲,冲,冲!!!


![浅谈C语言指针——二维数组、*pt[i]、(*pt)[i] 浅谈C语言指针——二维数组、*pt[i]、(*pt)[i]](http://www.mshxw.com/aiimages/31/1008282.png)
