相信大家之前都接触过数组了,除了字符数组的应用,在C语言中其实还有指针数组的引用。那么到底什么是指针数组呢?它的作用又是什么呢?下面课课家小编就为大家简单介绍C语言中的指针数组的概念和作用。
首先小编先给大家讲讲指针数组的概念:在C语言和C++语言中,数组元素全为指针的数组称为指针数组。一维指针数组的定义形式为:“类型名*数组标识符[数组长度]”。比如一个一维指针数组的定义:int*ptr_array[10]。指针数组的定义形式一般为:dataType*arrayName[length];。[]的优先级高于*,该定义形式应该理解为:dataType*(arrayName[length]);,括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType*。除了每个元素的数据类型不同,指针数组和普通数组在其他方面都是一样的,下面小编给大家举一个简单的代码例子:
#include
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
intmain(){
char*str[3]={
"www.kokojia.com",
"课课家",
"CLanguage"
};
printf("%s\\n%s\\n%s\\n",str[0],str[1],str[2]);
return0;
}
输出结果:
www.kokojia.com
课课家
CLanguage
此时我们需要注意的是,字符数组str中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符数组是分开的,也只有当指针数组中每个元素的类型都是char*时,才能像上面那样给指针数组赋值,其他类型不行。为了便于理解,我们可以将上面的字符串数组改成下面的形式,它们都是等价的。
#include
intmain(){
char*str0="www.kokojia.com";
char*str1="课课家";
char*str2="CLanguage";
char*str[3]={str0,str1,str2};
printf("%s\\n%s\\n%s\\n",str[0],str[1],str[2]);
return0;
}
本次简单分析C语言指针数组的讲解到此就暂告一段落,如果以后有什么内容继续补充或者修改的话小编会在此继续补充或者修改,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后小编希望本次的讲解对大家学习C语言能够起到一定的帮助作用!