C语言学习
一.简介
上次我们说了,指针函数和函数指针,今天我们来说一下,指针数组和数组指针,其中这些看起来很绕的东西,我们掌握对了方法还是挺好记的,还是老办法,看关键词那个再后面就是什么
- 指针数组, 本质还是数组
- 数组指针, 本质还是指针
二.指针数组
我们先来说一下指针数组,顾名思义,这是一个存放指针类型的数组
从定义上来看
int* p[3]; //没有括号括起来它还是数组
这里我还是写一个程序来理解一下
#include <stdio.h>
int main()
{
//定义一个有三个元素的指针数组
int* p[3];
int arr[3] = {1,2,3};
for(int i = 0; i < 3; i++)
{
p[i] = &arr[i]; //p数组存的是arr数组元素的地址
printf(" %d", * p[i]); //加 * 就可以看到它的值
}
return 0;
}
程序运行的结果
1 2 3
三.数组指针
指向指针的数组) 又称行指针
如何定义
int (* p)[3];
从形式来看,是一个指针变量,指向包含了两个元素的数组,每次指针加一时,都要横跨整个步长。似乎数组指针是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。
我还是用程序说明
#include <stdio.h>
int main()
{
//定义一个有三个元素的指针数组
int (*p)[3];
int arr[2][3] = {{1,2,3},{4,5,6}}; //二维数组 2行 3列
p = arr; //将该二维数组的首地址赋给p,也就是arr[0]或&arr[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行arr[0][]指向了行arr[1][]
for(int i = 0; i < 3; i++)
{
printf(" %d", *(*p+i));
}
return 0;
}
运行的结果
4 5 6
所以数组指针也称指向一维数组的指针,亦称行指针。