C语言进阶(一) 指针数组和数组指针详解

1.定义

  • 指针数组:
    从文字的角度来理解,指针数组这个词语中指针是修饰词,数组是主语,因此可以理解为指针的数组,所以这个东西本质上还是一个数组,数组里的每一个元素都是指针;
  • 数组指针:
    同样我们从文字的角度来理解,数组指针中数组是修饰词,指针是主语,因此是指向数组的一个指针

2.实际例子

char *p[2]
//[]的优先级比*更高,因此p先和[]结合,所以这个是一个数组,
//*用来修饰数组的,代表数组中的元素都是指针

char (*p)[2]
//加了括号之后,p首先是一个指针,所以是数组指针
//指向的是一个具有两个元素的数组
  • 数组指针/指针数组的size是多少?

我们可用sizeof来进行实验,我们都知道指针的size和系统位数有关,因为指针实际上就是一个地址,在32位系统下,指针的size是4个字节;

#include 

int main(void)
{
    char *p1[2] = {"hello", "world"};
    
    char array[2] = {1, 2};
    char (*p2)[2] = &array;
    
    printf("%d, %d\n", sizeof(p1), sizeof(p2));
}

gary@ubuntu:~/workspaces/elf_memory$ ./a.out 
16, 8
gary@ubuntu:~/workspaces/elf_memory$ uname -a
Linux ubuntu 4.15.0-91-generic #92~16.04.1-Ubuntu SMP Fri Feb 28 14:57:22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • 指针数组+1与指针+1

指针数组+1会加上整个数组的元素数量
指针+1加的是单个元素
看如下代码和运行结果
image.png

你可能感兴趣的:(嵌入式,c)