取数组名的地址(c语言,关于对数组名取地址)

本文目录
- c语言,关于对数组名取地址
- 怎样取出数组地址
- 关于C语言中对数组取址的问题,详见补充:
- c语言求助!知道数组首地址怎么求出数组元素地址
- 数组名和数组名取地址&的区别
- C语言:对一维数组名取地址运算,怎么理解为指行的指针例:a[2][3],&a[0]指行二维数组的
- 为什么数组名取地址和数组名的取值一样
- C#中如何获取数组首元素的地址
- 为什么C语言中一个数组的名字和这个数组名字的取地址
c语言,关于对数组名取地址
准确的说法,是变成了二级指针。
而二级指针,是指向指针地址的指针,变相相当于一个第一维度只有1的二维数组。
其中的根源,在于C语言中,声明一个数组其实相当于申请了一个定长的指针(存储位置不同,使用上还是有区别的),你可以将数组名当做指针使用,而反过来,也可以将一个指针,以数组的方式合法访问其成员。而二维数组的声明后,A的地址,和二级指针相同。
怎样取出数组地址
数组名称实质上就是指向数组第一个元素的指针。因此可以直接将其赋值给指针P
p=a;
传引用数组时只需传递数组名。调用数组时默认也是传引用方式。
如果要取数组中某一元素的地址则需要
p=&a;(i为所需数组元素的下标)
或者
p=a+i;
a+i等于&a;
a等于a
而p=&a;则是取指针a的地址赋给p,p成为了指向a的指针(指针的指针)与第一种及第三种赋值是不同的。
关于C语言中对数组取址的问题,详见补充:
对于一个数组来说,数组名是一个地址常量
并不是说是一个地址常量就没有地址(也就是存储常量的存储单元)
当程序没有被调入内存时候,是由三部分代码组成的,依次是二进制代码区(text segment),已经被初始化的静态或者全局变量区(data segment),没有被初始化的静态或者全局变量区(bss segment),常量都是存放在data segment区
当程序被调入内存之后,就在三部分的基础上又被分配了堆区和栈区,栈区用来存放临时变量,参数和返回值等临时的变量
就相当于我们定义char *a="12345",我们都知道这里的“a”是main()中定义的一个指向字符串“12345”的指针,那么“12345”是存放在哪里的呢,就是存放在data segment区的,而“a”变量本身确实存放在程序调入内存后被自动分配的栈区
强制转换的本质上是不改变存储单元中的01代码组合的,只是告诉编译器这个单元的数据将要被作为什么数据处理,例如一个指针变量占据4字节,一个int变量也是四个字节,我们就可以把int强制转换成指针的,需要的时候再把指针转换成int,输出int型结果时是不发生变化的
在这个题目中,“a”是一个数组名,也就是一个地址常量,这个常量存放在data segment区,“&a”取了“a”的地址,也就是一个指向“a”的指针,所以第三个语句是把指向“a”的指针进行了强制转换,第一个语句直接转换的“a”,第二个语句强制转换指向“a”的指针
c语言求助!知道数组首地址怎么求出数组元素地址
单维数组名就是首地址,多维数组名就是第1维的首地址,因此取首地址,可以把数组名赋给对应的指针变量,或取索引为0的首个元素地址赋给对应的指针变量。举例:
单维 int arr;
二维 int arr;// 取第一维地址
int arr; // 取多维中的首个元素
数组名和数组名取地址&的区别
$arr1 = array(1);
$arr2 = $arr1;//$arr2得到的是$arr1的一份拷贝,修改$arr2并不影响$arr1
$arr3 = &$arr1;//此时修改$arr3,则等同于修改$arr1,因为两者都执行内存中相同的地址
C语言:对一维数组名取地址运算,怎么理解为指行的指针例:a[2][3],&a[0]指行二维数组的
不管是几维的数组,他都是按照一个个的区间存储的,你把数组设置成int类型的,那他就以int为单位进行空间分配,你说的a【2】【3】会分配6个int的空间,而取行的地址则为一行的储存,如果只取一个应该写成&a【0】【0】就是第0行0列的地址了
为什么数组名取地址和数组名的取值一样
这两个看的角度不一样.
(1)arr只是arr的地址了.
(2)&arr是整个arr的值相同,但是&arr+1就已经增加了10个int类型的字节的长度了.
C#中如何获取数组首元素的地址
int index = 0;
int { 1, 2, 3, 4 };
IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(array, index);
// 引用命名空间 System.Runtime.InteropServices
// 使用方法 Marshal.UnsafeAddrOfPinnedArrayElement获取数组指定索引位置的指针
// array表示需要获取地址的数组,index表示索引的位置,返回的指针值的偏移量
// 如果index输入0,则返回数组首地址指针,若为1,则返回数组第二个元素地址指针
// 一般来说,如果没有特殊要求的话,index值输入0就可以了
为什么C语言中一个数组的名字和这个数组名字的取地址
先说这两个东西的含义
int a
a作为指针时,其类型为 int*(指向单int型的指针),并且对于数组这种情况,它会指向打头那个元素,也就是说a和&(a)是等价的
而&a,其类型为int(*) 数组类型的指针)/*感谢评论提醒修正*/,指向的就是数组的起始地址
然而,“数组的起始地址”和“数组头一个元素的起始地址”是等值的(自己念叨一下就知道,简直是废话)
所以你的输出得到的是两个相同的数值
当然这两个依然是有区别的,主要区别就是上文所说的类型不同。指针的类型不同主要会影响到*+-这些操作,使用的时候要注意就行了

更多文章:
sql查询语句表示阶级的(MS SQL 用WIHT CTE展开BOM的阶层,并展出他所在的层次码,母层必须紧跟下层子件!)
2026年7月7日 15:45
anaconda导入numpy库(安装anaconda-换源-安装ipython-安装ipython notebook)
2026年8月27日 09:45
tensorflow提供了那两种执行方式(tensorflow 之 算子与图)
2026年4月18日 11:15
facilitate接什么介词(where后面加定语从句吗)
2026年5月10日 16:45
excel文本框在哪里找(如何在excel文档中如何插入文本框(文本框嵌入excel单元格))
2026年8月31日 19:30
怎么全局安装nodejs(nodejs全局安装和本地安装的区别)
2026年9月2日 07:30
前端开发框架spring(Spring和SpringMVC的区别是什么)
2026年2月18日 16:45
loose woman是什么意思(意思有“放荡、半老徐娘”的词,可能是典故里的人物,听起来像***chy mama 是什么)
2026年7月19日 04:15
tomcat卸载重装(如何卸载linux系统中的tomcat)
2026年3月6日 09:15
matlab画心形函数图像(图形画出来是爱心的函数是什么,用matlab怎么画)
2025年9月5日 12:30
按键精灵 datediff(按键精灵如何让脚本在指定时间运行)
2025年12月27日 22:00
软件开发培训机构选用极客时间(极客时间上的软件测试课程讲的怎么样,内容全面吗)
2026年2月19日 02:00













