NDK基础:指针数组 数组指针

2019-11-05  本文已影响0人  space0o0

指针和数组

在学习之前,还是需要先学习下指针、数组的使用。

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行的一维数组。因此,数组指针的移动都是以行为单位的,所以,也被称为行指针

上一篇 下一篇

猜你喜欢

热点阅读