什么是指针数组?
数组指针是指向这个数组首地址的指针,指向对象是这个数组;
指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;
例子:
int a[10];
int* s;
s = a;//这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;
int a;
int* s[5];
for(int i=0;i<5;i++)s[i]=a;
//这里s就是一个指针数组,它的每个元素都是整型变量a的地址
应该算比较明白了吧
谢楼上提醒
数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
所以数组指针也称指向一维数组的指针,亦称行指针。
指针数组
定义 int *p[n];
[]
优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这
样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地
址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4];
p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
for(i=0;i<3;i++)
p[i]=a[i]
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。
这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
比如要表示数组中i行j列一个元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]
优先级:()>[]>*
指针数组就是说是一个数组,数组中的每一个成员是一个指针。举例如下:
char *a[5]={"tan","li","cheng","fang","zheng"};
定义指针数组a,存放姓名,a有5个成员,即a[5]是包含5个指针元素的指针数组,5个指针中每个的值是该字符串的首地址,也就是说
a[0]=字符't'的地址
a[1]=字符'l'的地址
a[2]=字符'c'的地址
a[3]=字符'f'的地址
a[4]=字符'z'的地址
为何要这样?因为各个名字是字符串不是单个字符,也就是说它相当于二维数组
tan
li
cheng
fang
zheng
也就是相当于有行有列,所以要找到数组中的某一个字符就要先找到所在的行即a[i],这里a[i]就是个指针指向每行的第一个字符的地址,*(a[i]+j)就是第i+1行第j+1个元素。也就是说
char *a[5]={"tan","li","cheng","fang","zheng"};
等价于定义
char a[5][6]={"tan","li","cheng","fang","zheng"};
只是对于字符串,函数strncpy,strcpy,strcmp,strlen,strcat,strstr,strchr的参数都是指针变量都是一个指向字符串首字符的地址的指针,故用指针数组表示一个二维数组更方便形象,有些数据结构复杂,用指针数组来指向它们,当要改变数据的顺序时只要改变指向它们的指针的顺序不必改变数据本身,这样可以简化问题。指针是个好东西,是c语言的精华。你只要好好看《谭浩强的c程序设计》就会完全明白。
数组指针就是指向一个数组的指针。数组中每一个元素在内存中都占有一个内存单元。当你要找到数组中某一个元素的时候,只须要找到该数组的首元素地址。
例如指针p指向数组a的首元素a[0],则a[9]的地址为p+9
指针数组和数组指针的区别有哪些?
指针数组:表示的是一个数组,数组中每一个变量都是指针型变量。数组指针:表示的是一个指针类型的变量,这个指针变量指向的是一个数组。
C语言指针数组指针怎样理解?
指针数组,指数组元素就是指针 数组指针,对于一维数组来说就是数组名 故对于一维数组来说,数组名是第一个元素的指针,而元素本身也是指针,故数组名是指向指针的指针。例如: int * p = &a; int ** q = &p;则p中储存的是整形变量a的地址,而指针p自身也是变量(指针变量通常占4个字节),故...
指针和数组的区别是什么
就指向了一处空内存(系统给你的,可以放心使用),且他是*const常量指针(注意不是指向常量的指针),这个指针只要一声明,就不能再改为指向其他内存。而且,数组和指针都能用中括号运算符进行地址偏移。综上所述,指针和数组的本质是完全一样的,只不过数组一开始就获得了一块内存 ...
数组和指针的区别
数组和指针的区别:1、指针变量用于保存数据的地址,数组用于直接保存数据(当然你可能见过,数组的每个元素是指针,不过,一组指针也是数据,它们各自的内容才是地址)。2、访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址。3、指针通常用于动态...
指针与数组的关系是什么啊
数组和指针的唯一区别是,不能改变数组名称指向的地址。对于数组来说,数组的首地址,也可以用指针来表示操作,如:int a[10];int *p,n;p = a;对第一个元素取值,可以用几种方法:n =a[0];n = *p;n = p[0];n = *(p+0) ;但是以下语句则是非法的:readings = totals; \/\/ 非法!
数组指针和指针数组的区别
int a[4][5]={{1,2,3,4,5},{6,7,8,9,10}} (*p)[5]=a;则*(*(p+1)+1)代表第二行的第二个元素7。指针数组是由若干指针组成的数组,它是一组指针,而不是一个指针。它和普通的数组一模一样,只是它存放的是指针,也就是地址,而不是元素的值。如:int a=2,b=3,c=5;int...
指针的与数组关系
指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。 char *p[10];\/\/p是一个指针数组数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。example:char (*p)[10]\/\/p是一个数组指针函数指针:本身是一个指针,指向一个函数入口地址,通过该...
指针与数组
有一点很重要的,数组名和指针之间有一个不同之处,指针是一个变量,因此,pa+a和pa++都his合法的,但数组名不是变量(类似一个宏定义?用数组名替换地址?),所以进行对自身的增减运算是非法的。 有时如果将数组名传递给函数,函数可以根据情况判定是按照数组处理还是按照指针处理,随后根据相应...
C语言:简述一下“数组和指针的关系”?
delete调用析构函数)Class *p=new Class; delete p;\/\/(4)指针的指针:(二级指针)int **pp=new (int*)[1];pp[0]=new int[6];delete[] pp[0];12345678910这里我们区分两个重要的概念:指针数组、数组指针。(1)指针数组:它实际上是一个数组,数组的每个元素存放的是一个指针类型的...
指针与数组的关系是什么啊
1,数组是一块内存连续的数据。2,指针是一个指向内存空间的变量。对于数组来说,数组的首地址,也可以用指针来表示操作,如:int a[10];int p,n;p = a;对第一个元素取值,可以用几种方法:n =a[0];n = p;n = p[0];n = (p+0);3,不同的地方是数组是由编译器分配的空间,变量名...
少水乌枣: 数组指针就是指向一个数组的指针.数组中每一个元素在内存中都占有一个内存单元.当你要找到数组中某一个元素的时候,只须要找到该数组的首元素地址. 例如指针p指向数组a的首元素a[0],则a[9]的地址为p+9
简阳市19272615812: C语言中的指针数组是什么意思?我对这个概念很混乱,指针数组的定义,作用,使 - ?
少水乌枣: 指针数组:就是存储指针的数组.数组指针:就是指向数组的指针.指针:本质就是一个int型变量,含义:一个内存地址.举例:int *p[10] 指针数组.原因:因为[的优先级比*高,p先和[结合,所以是指针数组.等同于int* p[10].int (*p)[10] 声明了一个指针P,指向有10个元素的数组.如果 int* p;就是声明了一个指向int变量的指针P.同理.int (*p)[10] 声明一个指向int[10]的数组.
简阳市19272615812: C语言中指针数组是什么意思? - ?
少水乌枣: int *p[n];-----指针数组,每个元素均为指向整型数据的指针. int (*)p[n];------p为指向一维数组的指针,这个一维数组有n个整型数据. int *p();----------函数带回指针,指针指向返回的值. int (*)p();------p为指向函数的指针.
简阳市19272615812: C++ 指针数组是什么?怎么用? - ?
少水乌枣: 指针数组主要用来指向若干字符串,使字符串的处理更加灵活.同时,我们应该清楚知道,字符串本身就是一个一维数组.对于指针数组应注意以下几点:(1):数组中的元素均为指针类型数据(2):在给数组赋值时,表面看到是比如字...
简阳市19272615812: 指针数组与数组指针 的区别及各自解释 - ?
少水乌枣: 指针数组即指针的数组(主体是数组),是指有一个数组,数组中的每一个元素都是一个指针类型.(类似的,整形数组,就是指数组中的每一个元素是一个整形). 数组指针即数组的指针(主体是指针),意思是有一个指针,这个指针是指向了一个数组的.
简阳市19272615812: 指针数组是什么的集合,指针数组的每一个元素都是什么 - ?
少水乌枣: 指针数组的集合是 指针 每一个元素是指针1 2 3组成了一个数值数组 A B C组成了一个字符数组*p *q *m组成了一个指针数组 明白了不
简阳市19272615812: 指针数组名称是什么变量,是指针的指针吗? - ?
少水乌枣: int *p[5]; 这是一个指针数组,5个指针用数组p定义了.p 这个名称表示指向 这个数组,它本身是一个指针,也就是二级指针了.实际上写法应该是 int* p[];更容易理解一些.
简阳市19272615812: C++ 指针数组 - ?
少水乌枣: 1:int *p[2]好理解的,指针数组,p[0], p[1]都是一个指针2.int (*p)[2],定义指向二维数组的指针,此二维数组的第二维必须是2. 如当有int (*p)[2]时:int a[3][3]; p=a;是错的. int a[3][2]; p=a;是正确的. 同理 int (*p)[3][4];定义指向三维数组的指针...
简阳市19272615812: 指针数组与数组指针的区别是什么?麻烦详细点?
少水乌枣: 没什么新东西,就抄袭一个给你,希望能帮忙, 原文出处: http://blog.csdn.net/gotomic/archive/2008/07/02/2606791.aspx概要:指针数组,顾名思义,就是说的首先是一个数组吧,然后数组的元素是指针而已数组指针:指向一个数组的指针全...