指针数组,数组指针,以及二维数组
来源:互联网 发布:seo顾问服务微博 编辑:程序博客网 时间:2024/06/07 03:03
看到两个名字只能感慨汉字强大,不过从英文,中文全称来看,很容易理解。
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
数组指针:a pointer to an array,即指向数组的指针
还要注意的是他们用法的区别,下面举例说明。
int* a[4] 指针数组
表示:数组a中的元素都为int型指针
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:指向数组a的指针
元素表示:(*a)[i]
接着说二维数组,刚学指针时,觉得指针来表示数组,只能用上面两个中的一个(因为往往分不清,所以也不知道具体是哪个),其实两个都可以,
下面就是例子:
#include <stdio.h>main(){ static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};/* 定义二维数组m并初始化*/ int (*p)[4];//数组指针 p是指针,指向一维数组,每个一维数组有4个int元素 int i,j; int *q[3];//指针数组 q是数组,数组元素是指针,3个int指针 p=m; //p是指针,可以直接指向二维数组 printf("--数组指针输出元素--/n"); for(i=0;i<3;i++)/*输出二维数组中各个元素的数值*/ { for(j=0;j<4;j++) { printf("%3d ",*(*(p+i)+j)); } printf("/n"); } printf("/n"); for(i=0;i<3;i++,p++)//p可看成是行指针 { printf("%3d ",**p);//每一行的第一个元素 printf("%3d ",*(*p+1));//每一行的第二个元素 printf("%3d ",*(*p+2));//每一行的第三个元素 printf("%3d ",*(*p+3));//每一行的第四个元素 printf("/n"); } printf("/n"); printf("--指针数组输出元素--/n"); for(i=0;i<3;i++) q[i]=m[i];//q是数组,元素q[i]是指针 for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%3d ",q[i][j]);//q[i][j]可换成*(q[i]+j) } printf("/n"); } printf("/n"); q[0]=m[0]; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%3d ",*(q[0]+j+4*i)); } printf("/n"); } printf("/n"); }
当你看到这里,或许你还是迷糊,感觉还是会搞混,那么这里还有一个方法。
右左法则
右左法则常常用来分析复杂申明;
右左法则的大致描述为:从未定义的变量名开始阅读声明,先向右看,然后向左看。当遇到括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号。这样一直继续下去,直到整个声明都被分析完毕。来分析一个的例子:int * (* (*fp) (int) ) [10];
阅读步骤:
1.从未定义的变量名开始阅读 --------------------------------------------fp
2.往右看,什么也没有,遇到了),因此往左看,遇到一个* ------一个指向某对象的指针
3.跳出括号,遇到了(int) -----------------------------------一个带一个int参数的函数
4.向左看,发现一个* ---------------------------------------(函数)返回一个指向某对象的指针
5.跳出括号,向右看,遇到[10] ------------------------------一个10元素的数组
6.向左看,发现一个* ---------------------------------------一个指向某对象指针
7.向左看,发现int -----------------------------------------int类型
所以fp是指向函数的指针,该函数返回一个指向数组的指针,此数组有10个int*型的元素。
int(*a)[],便是a指针,指向数组——数组指针;
int *a[],便是数组a,此数组内有int*型元素——指针数组。
阅读全文
0 0
- 指针数组,数组指针,以及二维数组
- 指针以及二维数组
- 二维数组 数组指针
- 二维数组 指针数组
- 数组指针,指针数组,二维数组,二维数组指针
- 数组指针,指针数组,二维数组,二维数组的指针
- 二维数组,指针数组和数组指针
- 二维数组、指针数组、数组指针
- 数组指针,指针数组和二维数组
- 二维数组&&指针数组与数组指针
- 二维指针、指针数组和数组指针
- C++ 数组指针 二维指针 指针数组
- C语言二维数组与指针数组以及行指针
- 指针数组以及数组指针
- 二维数组的分配以及数组指针数组
- 二维数组,二维数组的动态分配,以及向数组指针&指针数组的延伸
- 二维数组的排列以及二维数组与指针例题
- 二维数组与指针数组
- No module named win32api-for python3
- Linux内核文档翻译:Documentation/arm/Booting
- 深入理解Servlet原理
- 控制input标签只能输入数字
- 引入AOP 报错 error at ::0 formal unbound in pointcut
- 指针数组,数组指针,以及二维数组
- 写在开始
- Android OpenGL正交投影
- background的详细介绍
- 什么是JavaConfig
- 关于document的取值问题
- nodejs对mongodb数据库的增删改查操作(转载)
- 一个Java高级工程师的进阶之路
- emacs使用