提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
数组指针和指针数组这两个在C语言中非常重要的概念,由于他们定义的相似性,导致他们非常容易被搞混。这篇博客将会带大家从定义入手,逐步搞懂这两个东西。每天坚持努力的学习非常重要。学习的方式和方法有很多,通过博客网站针对性的进行学习是非常高效的方式。
一、数组指针和指针数组的定义
数组指针:指向数组的指针,是一个指针
int (*arr1)[5];//数组指针
上面这是一个数组指针,*先于arr1结合,确定了这是一个指针,这个指针所指向的是有五个元素的数组。
---------------------------------------------------------------------------------------------------------------------------------
指针数组:由多个指针组成的数组,是一个数组
int * arr2[5];//指针数组
上面的这是一个指针数组,【5】的优先级高,所以arr2先于【5】结合,确定了这是一个数组,这个数组存放了5个元素,每个元素是int *也就是整形指针。
---------------------------------------------------------------------------------------------------------------------------------
进阶例子:
如何定义一个存放数组指针的数组?
int (* arr3[10])[5];// arr3是一个存放数组指针的数组
arr3首先和【10】结合确定了 他是一个数组,存放是个元素。每个元素为int(*)[5],即每个元素为数组指针。
二、数组指针和指针数组的使用例子
1.建立初始环境
#include
int main(){
//主代码部分
return 0;
}
2.数组指针的使用
#include2.数组指针的使用int main(){ //主代码部分 return 0; }
数组指针一般用在二维数组的传参上面,先来看一般的写法
#includevoid printarr_1(int arr[2][3],int row,int col){ for(int i=0;i |
我们直接在printarr_1的形参部分定义一个二维数组去接受我们的二维数组,这是一个比较常见的做法。
我们再看如何用数组指针实现:
#includevoid printarr_2(int (*arr)[3],int row,int col){ for(int i=0;i |
这里我们在形参部分定义了一个数组指针去接受我们第一行的地址,同样也能达到效果。这是为什么呢?因为我们在使用arr的时候进行传参,相当于是使用了arr首元素的地址进传参。我们使用一个相对应长度数组指针进行接收,就完全没有问题。
3.指针数组的使用定义指针数组
int *arr1[10];//一级整形指针的数组 int **arr2[10];//二级整形指针的数组 char **arr2[10];//二级字符指针的数组函数指针数组(函数指针数组是指针数组非常重要的用法)
#includeint Add(int x, int y) { return x + y; } int Div(int x, int y) { return x / y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int main() { int (*pf[4])(int, int) = { Add,Div,Sub,Mul };//定义一个函数指针数组去使用所有函数 for (int i = 0; i < 4; i++) { printf("%dn", pf[i](4, 2)); } return 0; }
总结
以上就是数组指针、指针数组和函数指针数组的使用方法了,大家多多练习,可以配合我其他的博客巩固知识点。



