我们先看下面这段代码:

 #include <stdio.h>int main(){int arr[] = {1,2,3,4,5};int *p =(int*)(&arr+1);  //&arr操作的是整个数组,返回的指针指向整个数组,&arr+1偏移的是整个数组的长度。printf("%p %p \n",arr,&arr);printf("%p %p \n",arr+1,&arr+1);printf(" %d %d \n",*(p-1),*p-1);printf("%ld %ld \n",sizeof(arr),sizeof(&arr));return 0;}

运行结果!

0x7ffc9973b2e0 0x7ffc9973b2e0
0x7ffc9973b2e4 0x7ffc9973b2f4 5 32763
20 8 

1.&arr是操作的整个数组,+1后偏移的是整个数组的大小,int类型为4个字节数组中有5个int大小的元素,所以偏移的大小为20个字节。
2.&arr+1返回的是一个数组指针,我们要把他强转为int类型的指针,这样我们后面偏移的就是4个字节。
3. sizeof(arr)计算的是整个数组的大小,sizeof(&arr)计算的指针的大小,&arr是一个数组指针,指针在64位操作系统中占8个字节,在32位操作系统中占4个字节。
4.在*p-1中,数组越界,读到了内存中EBP-1的值(EBP我也清楚,就是越界了,哈哈)

C语言-取数组首地址相关推荐

  1. C语言中数组首地址和数组第一个元素的地址有什么区别

    C语言中数组首地址和数组第一个元素的地址关系如下: 1.它们的地址值是相等的. 2.第1个元素的地址如果是p,则p+1就是第2个元素的地址. 3.数组的首地址如果是p,则p+1就跳过这个数组而指向这个 ...

  2. 解析:数组名a、数组名取地址a、数组首地址a[0]、数组指针*p

    数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼. 1 解析不同变量之间的区别: 数组名a: 数组名可以作为数组第一个元素的指针.我们由数组和指针的关系知道,a代表这个地址数值,它相当于一 ...

  3. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

    文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...

  4. C++ 数组名a、数组名取地址a、数组首地址a[0]、数组指针*p

    数组名a: 数组名可以作为数组第一个元素的指针.由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址.数组中的其他元素可以通过a的位移 ...

  5. c 语言 二维数组地址,C/C++ 关于一维或二维数组首地址表示含义

    C/C++ 关于一维或二维数组首地址表示含义 发布时间:2020-06-26 10:35:21 来源:51CTO 阅读:210 作者:sonissa 这是一个经常会忘却的知识点,最近也一直在吃这方面的 ...

  6. 数组首地址arry和arry的区别

    今天在梳理指针地址的问题中,突然发现数组首地址都能用arry和&arry来表示.所以网上查找了一下这两个区别,总结如下. 1. 区别 int arry[5] = {0}; arry      ...

  7. c语言指针指向数组首地址,C语言指向数组元素的指针

    指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...

  8. c++如何打印一维数组首地址_C语言之二维数组和指针的结合

    最近在练习 C 语言计算机二级的程序设计题,碰到了二维数组和指针的结合,当时怎么调试都不对,自己也记不清楚该怎么用了就跑去看书翻资料重新复习.自己纠结的问题是二维数组 int a[3][4]的数组名是 ...

  9. char a[]和char *a的比较,数组名,数组首地址,a,a,a[0]

    char a[]和char *a的比较 指针和数组存在着一些本质的区别.当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指 ...

最新文章

  1. [问题解决]NotImplementedError 错误原因:子类没有实现父类要求一定要实现的接口
  2. java实现最长连续子序列_Java实现O(n)最大连续子序列和 | 学步园
  3. WIN2003下×××服务器架设攻略
  4. 计算机网络与应用周林 课后题,阅读下面文章,完成
  5. 把MSSQL2005转换成MSSQL2000
  6. 技术分享:什么是CDN鉴权(by光网烈火)
  7. C++远程dll注入到QQ聊天工具
  8. Linux进程地址空间和虚拟内存
  9. windows 编程 之 问题解决笔记
  10. Openstack api 学习文档 restclient使用文档
  11. 离散数学-第八章图论及其应用
  12. ViewPage实现一屏多页面显示(进阶版)
  13. Esxi7.0.2安装点心云虚拟机,实现闲置宽带共享。收益丰厚~
  14. mkfs.ext3 --Discarding device blocks: 4096/196608
  15. Python发送多附件邮件的方法
  16. ImportError: DLL load failed while importing _multiarray_umath: 找不到指定的模块(pyinstaller打包的问题)
  17. 浅议抖音短视频平台的利与弊
  18. 基于“机器学习”的智能聊天机器人---python实现(1)
  19. 三角函数有理式的不定积分
  20. 全军尽墨的Android应用:社会化授权登录及分享安全漏洞

热门文章

  1. 可以在线ps的网站,相当于在线的photoshop
  2. iis支持php jsp,IIS7支持JSP(IIS7将80端口转发到Tomcat)
  3. 绕过EAC 简单的反作弊
  4. 北京故宫暴雨中未积水 600年排水系统经受考验
  5. 计算机网络笔记Part5 传输层(Transport Layer)
  6. 前端笔记知识点整合之JavaScript(四)关于函数、作用域、闭包那点事
  7. Python中类(class)的定义及用法
  8. 朴素贝叶斯分类算法python代码
  9. 阿里美国员工薪资曝光!工程师底薪最高超20万美元
  10. 自定义收缩TextView