C语言 指针数组

236 阅读1分钟

纯小白,大佬勿喷

例子:
#include <stdio.h>
int main(){
    int a = 16, b = 932, c = 100;
    //定义一个指针数组
    int *arr[3] = {&a, &b, &c};//也可以不指定长度,直接写作 int *parr[]
    //定义一个指向指针数组的指针
    int **parr = arr;  // parr是指向arr第0个元素的指针
    //int*(*parr) 
    // 括号中的*表示parr是一个指针
    // 括号外的 int* 表示parr指向的数据的类型  
    printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);  
    //arr[0]是一个指针 要在前面加上* 才能拿个他的值
    printf("%d, %d, %d\n", *parr[0], *parr[2], **(parr+2));
    // parr+i     表示第 i 个元素的地址,
    // *(parr+i)  表示获取第 i 个元素的值(该元素是一个指针),、
    // **(parr+i) 表示获取第 i 个元素指向的数据。
    return 0;
}

结论:

*arr[0] == **(parr+0)
*arr[0],    *arr[1],    *arr[2] 
16,         932,        100

**(parr+0), **(parr+1), **(parr+2) 
16,         932,        100
arr[0] == *parr
arr,      arr[0]    arr[1],    arr[2] 
-16774208,-16774228 -16774224, -16774220

*parr,     *(parr+0), *(parr+1), *(parr+2)
-16774228, -16774228, -16774224, -16774220

ps: 为什么arr ≠ arr[0]????

&arr[0] == &(*parr) == parr
&arr[0]    &arr[1]       &arr[2] 
-16774208, -16774200,    -16774192

&(*parr),  &(*(parr+1)), &(*(parr+2))
-16774208, -16774200,    -16774192

parr+0     parr+1    parr+2 
-16774208,-16774200, -16774192