C语言学习—数组指针和指针数组的区别 心已赠人 2023-10-11 20:12 4阅读 0赞 ### 一、数组指针和指针数组的定义 ### 1.数组指针:定义 int (\*p)\[n\]; 由于()的优先级高,首先说明p是一个int类型指针,它是指向一个整型(int)的一维数组,这个一维数组的长度是n,也可以说是总共有n个格子。数组指针也称指向一维数组的指针,亦称行指针。 数组指针也可以称为“数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。 2.指针数组:定义 int \*p\[n\]; 指针数组可以说成是”指针的数组”,由于\*p没有括号,首先这个变量是一个数组,其次,”指针p”修饰这个数组,意思是说这个数组的所有元素都是指针类型,而指针所占的字节数和其类型无关,只与系统有关,在32位系统下,任何类型的指针占据4个字节,在64位系统下,任何类型的指针占据8个字节。 ### 二、数组指针和指针数组的使用 ### 1.数组指针 首先定义一个数组指针,既然是数组的指针,说明是用指针p去指向一个一维数组,即: int (\*p)\[\[4\]\]; //这里定义int类型,p是一个指针,指向一维数组的首地址,这个一维数组大小为4 也就是说,int类型的指针p指向int \[\[4\]\]的数组,而数组的每一个元素是一个int类型的变量。 数组指针本质是一个指针,而指针的作用就是用来指向变量的地址,所以数组指针一般可以这样使用(示例): void fun(int (\*P)\[4\]); //子函数中的形参,数组指针 a\[3\]\[4\] = \{0\}; //主函数中定义的二维数组 fun(a); //主函数调用子函数的实参,是二维数组的首元素首地址 void fun(int (*P)[4]); //子函数中的形参,数组指针 a[3][4] = {0}; //主函数中定义的二维数组 fun(a); //主函数调用子函数的实参,是二维数组的首元素首地址 2.指针数组 对于指针数组,也就是“指针的数组”,说明这个数组的所有元素都是指针类型。不妨定义指针p,例如: int \*p\[\[4\]\]; //这里数组长度为4,所有元素均为int类型的指针 代码如下(示例): void Fun(char** str); //子函数中的形参,指针数组 int main() { int arr[3][4]; char* str = "abc"; char** q = &str; } 指针数组和数组指针参数传递问题 传递的参数 匹配需要的形参 <table style="width:500px;"> <tbody> <tr> <th>传递的参数</th> <th>匹配需要的形参</th> </tr> <tr> <td>int *p[4]</td> <td>int **p(指针数组或者二级指针)</td> </tr> <tr> <td>int (*p)[4]</td> <td>int (*p)[4](不变)</td> </tr> <tr> <td>int [3][4]</td> <td>int (*p)[4](数组指针)</td> </tr> <tr> <td>int **p</td> <td>int **p(不变)</td> </tr> </tbody> </table> ## 三、实际使用的例子 ## 例子:使用指针数组打印出:“sun wu kong” ![watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASGVubnJ5OTg_size_20_color_FFFFFF_t_70_g_se_x_16_pic_center][] // 代码块 打印“sun wu kong” char str1[] = { 's', 'u', 'n' , '\0' }; char str2[] = { 'w', 'u' ,'\0' }; char str3[] = { 'k', 'o', 'n', 'g' ,'\0' }; char* p[3] = { str1, str2, str3 }; ### 总结 ### 提示:这里对文章进行总结: 1.数组指针简单理解为“数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。 2.指针数组简单理解为“指针的数组”,首先这个变量是一个数组,其次,”指针p”修饰这个数组,意思是说这个数组的所有元素都是指针类型。 3.关于函数传参的问题:传递的参数:int \*p\[4\] -> 匹配需要的形参:int \*\*p(指针数组或者二级指针);传递的参数:int (\*p)\[4\] -> 匹配需要的形参:int (\*p)\[4\](不变)。 [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASGVubnJ5OTg_size_20_color_FFFFFF_t_70_g_se_x_16_pic_center]: https://img-blog.csdnimg.cn/f47911f4bf3340ef8657277b18450a52.PNG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGVubnJ5OTg=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
还没有评论,来说两句吧...