C++ 彻底搞懂指针(3)

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); 

  • 39
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值