在C语言语言中,数组元素全为指针的数组称为指针数组。指针数组可以作为函数的参量使用,使用方式与普通数组类似。数组指针是指向数组首元素的地址的指针,其本质为指针,指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动。
指针数组是数组元素为指针的数组,其本质为数组。指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。
指针数组和数组指针的区别
1、性质不同
指针数组:首先它是一个数组,数组的元素都是指针,它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组,它是“指向数组的指针”的简称。
2、字节不同
数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32位系统下任何类型的指针永远是占4个字节。
数组指针在32位系统下任何类型的指针永远是占4个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。
3、表示方法不同
指针数组:数组a中的元素都为int型指针;数组指针:指向数组a的指针。
4、变量不同
指针数组:指针数组可以说成是”指针的数组”,这个变量是一个数组。
数组指针:数组指针可以说成是”数组的指针”,这个变量是一个指针。
指针数组与指向指针的指针有什么区别
他们的区别是:指针数组,表示的是一个由指针变量组成的数组也就是说其中的元素都是指针变量,而数组指针表示的是这是个指向数组的指针。
那么该指针变量存储的地址就必须是数组的首地址得是个指向行的地址,比如a[3][4]数组中的 a,a+2 等,不能是具体的指向列的地址,如 &a{2][1], &a[2][1] 这类地址。
指针数组:
指针数组可以说成指针的数组,这个变量是一个数组。其次指针修饰这个数组,意思是说这个数组的所有元素都是指针类型,在 32 位系统中指针占四个字节。
数组指针:
数组指针可以说成是数组的指针.这个变量是一个指针。其次数组修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。
根据上面的解释可以了解到指针数组和数组指针的区别,因为二者根本就是种类型的变量。
什么是指针数组?
同志们他说的是指针数组不是数组指针。
指针数组就是说是一个数组,数组中的每一个成员是一个指针。举例如下:
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程序设计》就会完全明白。
相关推荐: