1. 数组指针、二维数组指针、字符串指针
1.1 定义一个数组指针
前面说过,指针变量存放的是地址,它可以存放普通变量的地址,可以存放另一个指针变量的地址,当然也可以存放数组、结构体、函数的地址。
如果一个指针指向了数组,就称它为数组指针,比如下面的代码就定义了一个指针 p 指向数组 arr:
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
在这里发现,定义一个元素类型为 int 的数组指针和定义一个指向int变量的指针的写法是一样的!
数组指针是指向数组中的一个具体元素,而不是整个数组,所以数组指针的类型和数组元素的类型有关,在上面的例子中,arr 数组的元素是 int 类型,所以 p 的类型也要是 int* 类型。
其实指针 p 并不知道它指向的是一个数组,p 只知道它指向的是一个整数,究竟如何使用 p 取决于代码里面怎么写。
1.2 数组名的含义
在上面的代码中,直接将 arr 赋值给指针 p,这是因为数组名 arr 可以被当作是一个指针常量,就是数组第一个元素的地址,在大多数使用数组名的表达式中,数组名就被当作一个指针常量,比如下面这个例子:
int arr[5] = {1, 2, 3, 4, 5};
int value;
value = arr[0]; //也可以写成 value = *arr;
value = arr[1]; //也可以写成 value = *(arr+1);
value = arr[3]; //也可以写成 value = *(arr+3);
虽然 arr[1] 和 *(arr+1) 表示同一个意思,但是从可读性来看,使用下标看起来更舒服
但是存在例外,当使用 sizeof 时,数组名就不是指针常量的意思了,比如在下面的例子中,size1 的值为20,而 size2 的值为4。
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
int size1 = sizeof(arr);
标签:arr,int,C++,数组名,value,数组,搞懂,指针 From: https://blog.csdn.net/GodJhin/article/details/140159617