码迷,mamicode.com
首页 > 编程语言 > 详细

指针数组&数组指针

时间:2015-04-29 13:39:28      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

二维数组:
1)定义形如int a[2][3],此时a代表的是这个二维数组的地址,sizeof(a)为24。
二级指针:
1)定义形如int **p:表示为指向指针的指针
2)二级指针不能和二维数组替换,如int aa[2][3],**a;a=aa;是错误的,但可以用int (*a)[3];a=aa替换。
指针数组:
1)定义形如int *p[5]:表示含有五个指针元素的数组、又称为二维指针,可以和p[5][n]在一定情况下通用,sizeof(p)为20。
2)每个元素均是指针。如p[0]、p[1]均是指针。
如 char *p[5]={
“saf”,
“rfsdfds”,
“gjnaf”,
“asdfds”,
“wef”
};
p[0]~p[4]均表示字符串的地址

3)p相当于数组名是一个常量不可以更改,类似p++、p+=1均是错误的,所以p不能作为左值。
4)指针数组和二级指针之间的替换
char *p[5]={“saf”,”rfsdfds”,”gjnaf”, “asdfds”,”wef”};
char **q;
q=p;//此时相当于将p隐式转换了。还可以理解为p本身就是一个一维数组(一维数组的地址),只是多一个,那么就可以用多一个的一级指针来替换。

5)指针数组作为参数
函数声明为void fun(char *p[]),调用fun(p).

数组指针:
1)定义形如int (*a)[3].a为指向数组的指针,sizeof(a)为4。
2)数值指针可以和多维数组替换,但是多级指针不可以和多维指针替换。

int (*a)[3],**aa,aaa[2][3];
a=aaa;//正确
aa=a;//错误
aa=aaa;//错误
因为a和aaa都表示一个数组指针,而aa仅仅表示一个指针的指针。
3)作为形参
void fun(int (*a)[3])//二维下标必须要明确指出,后面编译器计算a[i][1]的地址就相当于计算a+i*3+1.
{
int i;
for(i=0;i<2;i++)
printf(“%d”,a[i][1]);
}
int main()
{
int a[2][3]={1,2,3,4,5,6};
fun(a);
}

指针数组&数组指针

标签:

原文地址:http://blog.csdn.net/u014104588/article/details/45364719

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!