指针和数组
在学习之前,还是需要先学习下指针、数组的使用。
int main(){
//首先申明一个数组
int arr[]={100,200,300};
//申明一个指针变量,指向arr,然后打印出指针指向的数组
int* ptr=arr;
// *(ptr+1) = 400;
printf("%d \n" ,*ptr);
for (int i=0; i<3; i++) {
printf("%d \n" ,ptr[i]);
}
}
//log日志
100
100
200
300
可以看到,指针ptr现在指向第一位的值,如果我们想要指向第二位,只需要*(ptr+1)
现在把// *(ptr+1) = 400;
该行注释移除,该行指令代表的是修改数组第二位的值。
运行函数。
100 //这是*ptr
100 //数组0
400 //数组1
300 //数组2
我们可以直接使用指针+1的形式,修改数组的值。
指针数组
指针数组,顾名思义,就是一个数组,里面放的都是指针。本质上还是一个数组。
int arr[]={100,200,300};
//申明一个指针数组,和申明数组很像,只是多加了一个*
int *ptrs[3];
for (int i=0; i<3; i++) {
//指针数组每一位赋值,对应的是数组中每一个值的内存地址
ptrs[i] = &arr[i];
}
for (int i=0; i<3; i++) {
//打印指针数组的值
printf("%d \n" ,*ptrs[i]);
}
log日志
100
200
300
指针数组其实非常简单,只不过把数组的基本类型变成了指针。它是一个存放的都是内存地址的数据结构。
数组指针(行指针)
数组指针是指向数组地址的指针,本质上就是指针。
可是,普通指针也可以指向数组呀,那再来个数组指针是干什么用的?
假设我们有以下3x4的数组
int arrs[3][4]={
{1,2,3,4,},
{5,6,7,8,},
{9,10,11,12,}
};
//申明一个数组指针并指向arrs
int (*ptr)[4] = arrs;
ptr首先被申明是一个指针,指向了长度为4的一位数组,那它刚好就指向了arrs[0],也就是arrs的第一行数组。
当执行ptr++;
的时候,ptr就会跳过4位长度,指向第2行的一维数组。因此,数组指针的移动都是以行为单位的,所以,也被称为行指针。
网友评论