数组名取址&a+1和a+1

2023-05-16

第一天,取址数组名&a


C语言中的指针很重要,关于指针的使用,牛逼的那是真牛逼,不行的那是真不行,为了加深印象,争取做到每日一练!
如有错误,欢迎指正!

已知int a[5] = {1, 2, 3, 4, 5};
问:
1、数组名a代表什么?
2、&a是什么意思?
3、a+1&a+1

这是群里同学发的问题,我直接无脑回答了一下
1、数组名代表第一个元素
2、&a = &a[0];
3、a + 1 = a[0] + 1; &a + 1 = a[1];

工作中只用过a[1] = xxx;这种最基础的东西,学指针的时候就记住数组可以当指针用,可以说回答的一塌糊涂

正确答案:
1、数组名代表数组的第一个元素的地址
2、&a表示取得整个数组a的地址,即&a是一个指向整个数组的指针
3、a + 1 本身是个地址,是a[1]的地址。
&a+1,&a是一维指针,&a+1代表指向下一个整数数组的指针

验证

#include<stdio.h>

int main()
{
    int a[5] = {1,2,3,4,5};

    printf("*a         = %d\n", *a);
    printf("addr a     = %p\n", a);
    printf("addr a[0]  = %p\n", &a[0]);
    
    printf("*(&a)[0]   = %d\n", *(&a)[0]);
    printf("*(a+1)     = %d\n", *(a+1));
    printf("&a+1       = %p\n", &a+1);
    
    return 0;
}



结果如下:

*a         = 1
addr a     = 0x7fff47c00cb0
addr a[0]  = 0x7fff47c00cb0
从上面三行可以看出,数组名a就是a[0]的地址,所以*a = a[0]

*(&a)[0]   = 1
a是a[0]的地址对吧,那&a呢?注意哦,也是也指针哦,只是指向整个数组
那么大的空间了。而(&a)[0]就是这块空间的第一个元素地址,就是a[0]的地址
加上一个*,还是a[0] = 1


*(a+1)     = 2
a是a[0]的地址,地址+n的运算是:a+n = addr + sizeof(int)*n;你可能会问为什么要乘以 
sizeof(int),因为你元素大小就是它啊!所以a+1 = &a[1], *(a+1) = a[1] = 2

&a+1       = 0x7fff47c00cc4
解释一下为什么比首地址a多了0x14,即十进制的20,前面说&a+1就代表数组a[5]后的、
跟它同类型的数组地址,那a[5]得大小不就是5*4=20吗,紧挨着它屁股后面的可不就得+20

二维数组是数组元素为一维数组的一维数组
如下有一个二维数组int c[2][5];
则有c[0][0] = a[0]; c[0][1] = a[1];… c[0][4] = a[4]

c[1][0] = b[0];…c[1][4] = b[4];

对照上面的问题,&a是一维指针,&a指向a,&a+1指向b,这也证明了
二维数组就是数组元素为一维数组的一维数组,等于把二维数组c分成了ab两块

像这样int c[2][5] = { { a[0], a[1]...a[4] }, { b[0], b[1]...b[4] } };
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组名取址&a+1和a+1 的相关文章

  • AT&T语法

    在linux内核编写中 为了维持与gcc输出汇编程序的兼容性 as汇编器使用AT amp T系统的V的汇编语法 下面简称为AT amp T语法 这种语法与Intel汇编程序使用的语法 简称Intel语法 很不一样 他们之间的主要区别有以下几
  • ESP实验02-读取DS1307&eerom34c32

    1 模块介绍 本实验主要用到两个模块 esp32 tinyRTC 模块的图片如下所示 xff1a esp32模块型号为ESP32Devkitc v4 xff0c 是启明云端官方的开发板 与乐鑫官方的完全一致 xff0c 引脚顺序 xff0c
  • LLVM/clang & lib路径 & 测试代码

    部分转载自 xff1a Ubuntu编译安装llvm clangUbuntu14 04 Linux安装LLVM clang 3 7 xff08 带有标准库 libc 43 43 xff0c libc 43 43 abi xff09 所需即所
  • 计算机图形学方向和前景&&3D

    我是刚入坑计算机图形学的小菜鸟 xff0c 在百度上搜索计算机图形学方向和前景和3D xff0c 几乎不能搜到什么有用的东西 xff0c google还能搜到些有用的 xff0c 但是需要翻墙 恰好前几天山大承办的games xff0c 北
  • OpenGL进阶 | GLM数学库& Shader相关

    一 GLM数学库 OpenGL和DirextX不一样 xff0c 没有内置的数学库 xff0c 于是我们需要找一个第三方数学库来完成OpenGL相关的数学计算 GLM库是一个为OpenGL准备的数学库 xff0c 它提供了各种数学运算的函数
  • CSU 1333 & Uva 12661 Funny Car Racing【最短路变形+spfa算法,链式前向星建图】

    Funny Car Racing Memory Limit 131072KB64bit IO Format lld amp llu Status Description There is a funny car racing in a ci
  • (5)py接口自动化之配置文件&数据库连接详解

    目录 一 配置文件 ini amp yaml 1 作用 2 ini A 语法 B 特点 C 操作方法 3 yaml A 安装第三方库 B 支持的数据类型 C 特性 D 语法 E 数据读取 二 数据库连接与pytho配置文件 1 安装数据库
  • 时空行为检测数据集 JHMDB & UCF101_24 详解

    文章目录 0 前言1 JHMDB1 1 基本情况1 2 数据准备以及标签详解 2 UDF101 242 1 基本情况2 2 数据准备与标签详解 3 数据集可视化代码 0 前言 现在常用的时空行为检测数据集只有AVA JHMDB UCF101
  • 持续请求/socket.io/?EIO=3&transport=polling&t=N8HrzIR

    项目基本介绍 xff1a 使用React xff0c webpack xff0c socket io client Node js Express socket io 等技术 xff0c 采用前后端分离开发 实现项目中的聊天室时遇到报错 x
  • C++编程(五)--- Cmake详解&Makefile详解

    C C 43 43 程序员肯定离不开Makefile和Cmake xff0c 因为如果对这两个工具不熟悉 xff0c 那么你就不是一个合格的C C 43 43 程序员 本文对Makefile和Cmake xff0c 及它们的使用进行了详细的
  • STM32调试方式JTAG&SWD的区别

    在学习STM32时 xff0c 我们经常会遇到JTAG和SWD的调试方法 xff0c 还涉及到Jlink Ulink Stlink等 xff0c JTAG和SWD是ARM板一种调试模式 后面三种都是实现这种模式的一种工具 xff0c 他们之
  • ROS通信机制~话题通信(Publisher&Subscriber)·笔记2

    系列文章目录 xff1a ROS开发 xff08 ubuntu xff09 笔记 1 嘻 嘻的博客 CSDN博客 ROS通信机制 服务通信 server amp client 笔记3 嘻 嘻的博客 CSDN博客 话题通信 理论模型 xff1
  • cv::imread(cv::String const&, int)’未定义的引用

    在 Makefile文件的195 行 LIBRARIES 43 61 opencv core opencv highgui opencv imgproc 后面添加 xff1a opencv imgcodecs opencv videoio修
  • c语言中&与&&区别

    c语言中 amp 与 amp amp 的区别 amp xff1a 按照位与操作 xff0c 例如 xff1a 0010 amp 1101 xff0c 结果为0000 amp 是java中的位逻辑运算 xff1a eg xff1a 2 amp
  • ROS速成之发送&接收消息

    人真的老了 xff0c 扔了个周末 xff0c 完全不记得干了什么 论纪录的重要性啊 xff0c 当时觉得明白的很 xff0c 你扔两天试试 xff1f 扔一年试试 xff1f 扔几年试试 xff1f 最近参加的各种项目脑疼眼乏 xff0c
  • ZYNQ有两个CPU?(一)——AMP搭建

    ZYNQ有两个CPU xff1f xff08 一 xff09 AMP搭建 罗宾老师 嵌入式教师 码峰社QQ群541931432
  • SIP 鉴权 & HTTP 认证

    sip 鉴权是基于摘要签名认证的 具体来说 每一个用户都有一个用户名和密码 用户名和密码在客户端和SIP 服务器的数据库中都有保存 在认证的过程中 客户端将自己的信息 用户名 密码 url 等信息 做一些复杂的MD5 或者SHA256 SH
  • n&(1<<i)用法

    1 lt lt i 是将1左移i位 xff0c 即第i位为1 xff0c 其余位为0 xff1b 例如1 lt lt 2 则0001 gt 0100 n amp 1 lt lt i 是将左移i位的1与n进行按位与 xff0c 即为保留n的第
  • UART&RS232&RS485的区别

    UART RS232 RS485在串口通信中 xff0c 主要区别是电平的不同 xff0c 其中UART通常使用TTL电平 TTL TTL全名是晶体管 晶体管逻辑集成电路 Transistor Transistor Logic 输入高电平最
  • 无人机集群任务规划方法研究综述&论文解读

    无人机集群任务规划方法研究综述 amp 论文解读 参考文献引言 任务规划理论模型 xff1a 分布式任务规划理论分布式智能规划方法的出现 xff1a 无人机集群应用的核心技术集中式 xff1a 分布式集散式 基于逻辑与规则的多无人机任务规划

随机推荐