C语言 指针数组详解及示例代码
如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。指针数组的定义形式一般为:
dataType*arrayName[length];
[]的优先级高于*,该定义形式应该理解为:
dataType*(arrayName[length]);
括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType*。
除了每个元素的数据类型不同,指针数组和普通数组在其他方面都是一样的,下面是一个简单的例子:
#include<stdio.h> intmain(){ inta=16,b=932,c=100; //定义一个指针数组 int*arr[3]={&a,&b,&c};//也可以不指定长度,直接写作int*parr[] //定义一个指向指针数组的指针 int**parr=arr; printf("%d,%d,%d\n",*arr[0],*arr[1],*arr[2]); printf("%d,%d,%d\n",**(parr+0),**(parr+1),**(parr+2)); return0; }
运行结果:
16,932,100
16,932,100
arr是一个指针数组,它包含了3个元素,每个元素都是一个指针,在定义arr的同时,我们使用变量a、b、c的地址对它进行了初始化,这和普通数组是多么地类似。
parr是指向数组arr的指针,确切地说是指向arr第0个元素的指针,它的定义形式应该理解为int*(*parr),括号中的*表示parr是一个指针,括号外面的int*表示parr指向的数据的类型。arr第一个元素的类型为int*,所以在定义parr时要加两个*。
第一个printf()语句中,arr[i]表示获取第i个元素的值,该元素是一个指针,还需要在前面增加一个*才能取得它指向的数据,也即*arr[i]的形式。
第二个printf()语句中,parr+i表示第i个元素的地址,*(parr+i)表示获取第i个元素的值(该元素是一个指针),**(parr+i)表示获取第i个元素指向的数据。
指针数组还可以和字符串数组结合使用,请看下面的例子:
#include<stdio.h> intmain(){ char*str[3]={ "c.biancheng.net", "C语言中文网", "CLanguage" }; printf("%s\n%s\n%s\n",str[0],str[1],str[2]); return0; }
运行结果:
c.biancheng.net
C语言中文网
CLanguage
需要注意的是,字符数组str中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符数组是分开的。
也只有当指针数组中每个元素的类型都是char*时,才能像上面那样给指针数组赋值,其他类型不行。
为了便于理解,可以将上面的字符串数组改成下面的形式,它们都是等价的。
#include<stdio.h> intmain(){ char*str0="c.biancheng.net"; char*str1="C语言中文网"; char*str2="CLanguage"; char*str[3]={str0,str1,str2}; printf("%s\n%s\n%s\n",str[0],str[1],str[2]); return0; }
以上就是对 C语言指针数组的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!