博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维数组和指针
阅读量:4876 次
发布时间:2019-06-11

本文共 1823 字,大约阅读时间需要 6 分钟。

1. 指针是变量的地址

#include 
using namespace std;int main(){ int a = 3; int * p = &a; cout << a << endl; // 3 cout << *p << endl; // 3 return 0;}

如上面这段程序所示,通过取地址符 &,指针 p 获得了变量 a 的地址,那么解引用符 * 就可以从 p 中得到变量 a 的值。

也就是说,p=&a*p=a 是等价的。p 是变量 a 的地址,从 p 中就可以取出 a 的值。反之,能从 p 中取出 a 的值,p 也就是变量 a 的地址。

2. 一维数组的数组名是数组的首地址

#include 
using namespace std;int main(){ // 一维数组的数组名就是数组的首地址 int data[3] = {1, 2, 3}; int *p1 = data; cout << p1[1] << endl; // 2 cout << *(p1+1) << endl; // 2 int *p2 = &data[0]; cout << p2[1] << endl; // 2 cout << *(p2+1) << endl; // 2 return 0;}

一维数组的数组名是数组的首地址,所以 int *p1 = data; 让指针 p1 也指向了数组首地址。这时候 *p1 是数组的第一个元素,*(p1+1) 也即是数组的第二个元素。

又因为 *p1 是数组的第一个元素,说明 p1 是数组第一个元素的地址,所以 int *p2 = &data[0]; 与上面等效。

3. 二维数组是数组的数组,其数组名是外层数组的首地址

#include 
using namespace std;int main(){ int data[3][3] = {
{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 行指针 //int (*p)[3] = &data[0]; int (*p)[3] = data; cout << p[1][2] << endl; // 6 cout << (*(p+1))[2] << endl; // 6 cout << *(p[1] + 2) << endl; // 6 cout << *(*(p+1)+2) << endl; // 6 return 0;}

data[3][3] 相当于是数组 data[data[0], data[1], data[2]],data[0], data[1], data[2] 都是有 3 个元素的一维数组,而 data 则是有 3 个这样数组的一维数组。

int (*p)[3] 表示行指针 p 指向一个有三个元素的数组,也就是指向外层数组的首地址,而 data&data[0] 是等价的。第一次解引用得到它指向的数组,第二次解引用才得到数组中的值。

#include 
using namespace std;int main(){ int data[3][3] = {
{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 列指针 //int *p = *data; //int *p = data[0]; int *p = &data[0][0]; cout << p[1 * 3 + 2] << endl; cout << *(p + 1 * 3 + 2) << endl; return 0;}

列指针是将二维数组展开成一维数组看待,所以列指针指向二维数组的第一个元素。&data[0][0]data[0]*data 三者都代表第一个元素的地址,访问元素需要一次解引用,[]* 等价。

获取更多精彩,请关注「seniusen」!

1240

转载于:https://www.cnblogs.com/seniusen/p/10906558.html

你可能感兴趣的文章
Android零基础入门第84节:引入Fragment原来是这么回事
查看>>
解析SQL Server之任务调度
查看>>
参考资料地址
查看>>
(转)为什么所有浏览器的userAgent都带Mozilla
查看>>
织梦字段属性筛选
查看>>
[Arduino] Leonardo 中文介绍
查看>>
无法加载csopenglc.dll;找不到指定模块
查看>>
08.路由规则中定义参数
查看>>
【转】虚拟机克隆之后,网卡名称从eth0变成eth1之后的解决办法
查看>>
Pandas截取列部分字符,并据此修改另一列的数据
查看>>
Android性能优化(2)
查看>>
java.lang.IllegalArgumentException
查看>>
pytest
查看>>
python爬取某个网站的图片并保存到本地
查看>>
【Spark】编程实战之模拟SparkRPC原理实现自定义RPC
查看>>
关于Setup Factory 9的一些使用方法
查看>>
接口实现观察者模式
查看>>
网站Session 处理方式
查看>>
记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息
查看>>
四则运算完结篇
查看>>