尊旭网
当前位置: 尊旭网 > 知识 >

指针数组

时间:2024-10-03 21:19:07 编辑:阿旭

C语言中,如何定义一个‘指针数组’,这个‘指针数组’专门用来存放‘数组指针’。

指针数组定义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)[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][]扩展资料:与数组指针关系数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);指针数组是数组元素为指针的数组,其本质为数组。例如:*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针,[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量与二维数组对比二维数组:如char string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。我们可以通过指定下标对其元素进行修改。指针数组:如char*str_B[5]系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。如果我做这样的定义:char a[3][8]={"gain","much","strong"};char*n[3]={"gain","much","strong"};他们在内存的存储方式分别如右图所示,可见,系统给数组a分配了3×8的空间,而给n分配的空间则取决于具体字符串的长度。此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。由此可见,相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。举例编辑数组指针:#includeint main(){char c[][4]={"哥","哥","我","岸","上","走"};//UTF-8:一个汉字=3个字节char(*p)[4];int i;p=c;//将指针定位于c[0]for(i=0;i<=5;i++){printf("%s,",*(p+i));//或者将*(p+i)替换成*p++}printf("\n");for(i=5;i>=0;i--){printf("%s,",*(p+i));//或者将*(p+i)替换成*--p}return 0;}指针数组:#includeint main(){int i;char*pch[6]={"妹","妹","你","坐","船","头"};for(i=0;i<6;i++){printf("%s,",pch);}printf("\n");for(i=5;i>=0;i--){printf("%s\n",pch);}return 0;}参考资料:百度百科——指针数组

c语言指针,指向数组的指针、指向指针数组的指针、指向数组的指针的指针,分别如何定义?

解答:1. 如何声明一个指针,这个指针是指向整个数组的,数组有n个元素,每个元素是int,不是int (*p)[n],而是最简单的int*p;2. 如何声明一个指针,这个指针也是指向数组的,数组有n个元素,每个元素不是int,而是指针int*;这个指针是int**p;3. 又如何声明一个指针,它指向另一个指针,这“另一个指针”指向一个数组,数组元素是int;这个指针仍然是int**p。


c语言数组不可以当成指针使用,但是指针可以当成数组使用吗?

可以1.指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。2.数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。3.核心思想是通过一个flag,来确定单词的起始, 每出现一个单词的起始,则表示存在一个单词。 这样统计出现的单词起始个数,即可获得单词总数。4.对于每个字符,如果出现非空格字符,且flag为1,则为单词起始,累加计数器。同时赋值flag为0。5.在flag为0情况下,如果出现空格,表示上一个单词已经结束,设置flag为1。

C语言数组指针?

int (*pstu)[4]; 为指向有4个元素的数组的指针int* getPosPerson(int pos, int (*pstu)[4]); 为返回值为指针的函数注意这是指针函数,而不是函数指针,后者为指向函数的指针变量,两者含义是不同的(类似指针数组和数组指针,两者含义也是不同的,一个本质是数组,一个本质是指针)调用该函数的语句为:ppos = getPosPerson(pos, scores);传入的scores表示3行4列的二维数组首行数组的地址,即&scores[0]调用后相当于int (*pstu)[4]=scores,所以在getPosPerson中pstu与scores是等价的即pstu可看作&scores[0],那么pstu+pos也就等价于scores+pos,等价于&scores[pos]即返回了指向&scores[pos](也就是scores第pos+1行的地址)的指针返回该行指针ppos 后,就可以查看该行表示的学生的4科成绩了