前几天有个同学让我帮他看一道关于指针的二级题。当时虽然做出来了,但感觉对概念还是有点模糊,所以刚刚就做了一个小测试。

测试代码是这样的:

#include #include

using namespacestd;int main(void)

{int t[3][3]={1,2,3,4,5,6,7,8,9};

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

system("pause");return 0;

}

测试结果是这样的:

观察结果会发现:

t和*t的值是一样的,但是*(t+1)和(*t)+1 的值却是不一样的。

而且(*t)+1的地址就是&t[0][1]  而*(t+1)的地址就是&t[1][0]。

为什么会这样呢??

首先要明确一点:t的值与&t[0][0],&t[0]和t[0]是相等的。他们都表示数组的首地址。

你可能会问为什么t[0]和t为什么相等,其实你用偏移量就能算出他们是相等了的。(另外注意它们两个都是地址值)

其实t数组是一个二维指针,它的数组名相当于一和行指针的指针数组是首地址,这样说有点绕口,

简单点说可以这样,t[3][3],本身相当于是3个一维数组,t[0],t[1],t[2],分别是三个一维数组。

显然t就是这三个数组的首地址了,很显然t+1的结果就应该是t[1]的地址,t+2就应该是t[2]的地址。

说这么多只是想让大家能更加清楚二维指针的+和 -运算的操作。

而*t这时候也就应该是t[0]了,t也是&t[0]的地址。所以他们是相等的。

但是*(t+1)与(*t)+1是不同的。因为t是一个二维指针,t+1就是t[1]的地址,*(t+1)就是&t[1][0],也就是数组中第4个元素4的地址了。

而(*t)+1中(*t)得到了t[0],注意此时t已经从一个二维指针退化到了一个一维指针了,这是对它+1,就自然是&t[0][1]了。

所以答案就自然而然了。

最后总结一下:

在指针经行运算的时候,主要要弄清指针到底是一维指针还是二维指针。如果是一维指针,那么它的偏移量就应该是1个基本元素的位移,

如果是二维指针,就应该是一行元素的位移,因为二维指针的相当于由一维数组指针组成的数组。

c语言指针测试代码,一个关于C语言指针的测试相关推荐

  1. c语言程序设计删除,C程序设计语言练习1-23 编写一个删除C语言程序中所有的注释语句...

    C程序设计语言练习1-23 编写一个删除C语言程序中所有的注释语句,要正确处理带引号的字符串与字符常量,以C语言中,注释不允许嵌套. 本程序运行后,将要求用户输入一个当前目录下的C源码程序文件名,读取 ...

  2. Go语学习笔记 - websocket gorilla(附测试代码) | 从零开始Go语言

    目录 项目结构 消息结构 服务端代码 定义客户端行为 服务启动 测试代码 总结 学习笔记,写到哪是哪. websocket也是常用的协议了,在上一篇中主要测试使用了一下grpc. 下面我会把代码贴出来 ...

  3. c语言sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美

    前言 1.本文主要围绕 如何 在 控制台上 下起 一场 只有自己能看见的雪 2.是个简易跨平台的,主要是C语言 3.动画 采用 1s 40帧, 雪花具有 x轴速度和y轴速度 4.比较简单,可以给学生作 ...

  4. 取两个数较小值c语言_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美...

    前言 1.本文主要围绕 如何 在 控制台上 下起 一场 只有自己能看见的雪 2.是个简易跨平台的,主要是C语言 3.动画 采用 1s 40帧, 雪花具有 x轴速度和y轴速度 4.比较简单,可以给学生作 ...

  5. c语言 sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美

    前言 1.本文主要围绕 如何 在 控制台上 下起 一场 只有自己能看见的雪 2.是个简易跨平台的,主要是C语言 3.动画 采用 1s 40帧, 雪花具有 x轴速度和y轴速度 4.比较简单,可以给学生作 ...

  6. VS2010 测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式“.NET研究”建立UI测试(下)...

    回顾 最近比较忙,距离上次更新的时间较久,见谅. 在本章上部分,介绍了"添加用户"窗口的测试代码编写.想必大家也看到了,在UIMap.cs文件中实现自定义编码是一件很轻松的事情,接 ...

  7. c语言300行代码大作业,C语言300行代码

    <C语言300行代码>由会员分享,可在线阅读,更多相关<C语言300行代码(3页珍藏版)>请在人人文库网上搜索. 1.include #include #include #in ...

  8. c语言变量名用一个字母,C语言变量命名规则

    <C语言变量命名规则>由会员分享,可在线阅读,更多相关<C语言变量命名规则(6页珍藏版)>请在人人文库网上搜索. 1.1.严格采用阶梯层次组织程序代码:各层次缩进的分格采用VC ...

  9. c语言用字符画一个椭圆,c语言,绘制椭圆并使其旋转.doc

    c语言,绘制椭圆并使其旋转 设计题目:绘制椭圆并使其旋转. 计算机程序训练题目及要求 目录 一.训练目的-------------------2 二.设计要求-------------------2 ...

最新文章

  1. 百度地图轨迹开发,如何绘制带有箭头的折线
  2. [note]抽象类和接口的相同点和不同点
  3. 文字层一点就变红_《蚂蚁前端研发最佳实践》文字稿
  4. python快速排序最简单写法_面试官:来,这位精神小伙,简简单单写个快速排序吧...
  5. php中sprintf与printf函数用法区别
  6. 无法启用数据库中的 Service Broker,因为已存在启用的具有相同 ID 的 Service Broker。...
  7. Excel常用函数+数据透视表
  8. TV版应用包名 TV常用apk包名 (当贝市场下载)
  9. 如何通过学校官网登录中国知网
  10. Maven配置文件示例
  11. Linux网络设备驱动程序设计----刘文涛
  12. 字节跳动「突袭」美团,抖音竟然要做外卖
  13. 科力锐助力政务云统一灾备中心建设
  14. 记录个tomcat启动报错问题,Unable to process Jar entry
  15. Chromium浏览器password unlock
  16. 批量安装系统工具cobbler配置
  17. jupyter notebook多行注释方法
  18. 关于Mysql使用时出现部分错误的总结
  19. mos 多路模拟电子开关_模拟多路开关-MOSFET全解.ppt
  20. “在线课堂”缩短城乡教育差距

热门文章

  1. linux运行sqlite,Linux上安装sqlite3
  2. uhd630黑苹hdmi_【EFI】联想 ThinkCentre M920t-N000 i5-9500 UHD630 ALC662 10.14.6 HDMI 黑苹果Hackintosh 引导下载...
  3. 肺结节圆形边界光滑_肺结节读片(16):再谈肺磨玻璃结节边界的CT形态特点
  4. java里frame颜色_如何为Java中的窗口(JFrame)添加颜色
  5. C语言创建学生姓名分数链表,C语言编程 编写程序,建立一个学生数据链表,学生的数据包括学号、姓名、成绩。...
  6. ubuntu下python多版本切换问题
  7. 学会这一招,轻松玩转 app 中混合应用自动化测试
  8. 面试高级测试工程师修炼之接口测试平台开发
  9. 超详细 | 接口自动化测试总结与分享入门篇
  10. 女孩子偷偷学好软件测试,想要年薪30w也没有很难!