数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p

本文链接:https://blog.csdn.net/loongkingwhat/article/details/78910921

数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼。

1 解析不同变量之间的区别:

数组名a:

数组名可以作为数组第一个元素的指针。我们由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i= & a[i]。

数组名取地址&a:

对于一个普通的变量b,&b是指用取地址符号取得变量b的存放地址;a在内存中没有分配空间,只对数组a的各个元素分配了存储空间,此处数组名字a显然不是普通的变量,&a也不代表所取a的存储地址。

&a在数值上等于&a[0],也等于a。此时,&a数值上等于整个数组的起始位置地址,含义上代表整个数组所占内存的大小,因为它的进阶单位是整个数组的字节长度,(&a + 1)等于的是数组结束之后的下一段的起始位置地址。

数组首地址&a[0]:

这个就是取地址的最直接的应用,a[0]在内存中实际分类存储空间,而&a[0]就是取该存储空间的地址,这与对于任意满足范围的i,&a[i]就是取第i个元素的存储地址一样。

数组指针*p:

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。经常用取地址符&将某个变量的地址赋给它,同时常常对指针用取值符号*取得对应地址的内容。

暂时还没做指针相关的总结,贴一篇不错的博客。让你不再害怕指针——C指针详解(经典,非常详细)大佬的这篇博客,内容和它的标题一样经典和详细,非常值得参考。

原文地址:https://www.cnblogs.com/pquan/p/11664033.html

时间: 2024-08-03 18:21:12

数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p的相关文章

数组首地址取地址

一.问题来由 普通指针可被改动导致地址偏移: #include <iostream> using namespace std; int main(int argc,char *argv[]) { int a = 6; int *p = &a; //p存放一个地址.pp存放p的地址,上面的代码能够让p存放的地址偏移 cout<<&a<<endl; int *pp = (int *)&p; cout<<p<<endl; (*p

C语言——数组名、取数组首地址的区别(一)

目录: 1. 开篇 2. 论数组名array.&array的区别 3. array.&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题,各有自己的表述方式,今天在他们的基础上我将继续试着以我自己理解的方式总结一下,欢迎大家的审阅和指评. 2.论数组名array.&array的区别——省政府和市政府的区别 例如: int array[5] = {0}; 总所周知,其中的&array是整个数组array的首地址,array是数组首

C语言学习笔记 (004) - 数组名和数组首地址(转)

一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中).所谓数组的指针是指数组的起始地址,数组元素的指针数组元素的地址. 这种指针变量的定义与以前介绍的指向变量的指针变量相同.应当注意,如果数组为int型,则指针变量亦应指向int型. C语言规定数组名代表数组的首地址,也就是第一个元素的地址.因此,下面两个语句等价: p=&a[0]: p=a: 注意数

PHP 根据配置转换数组中的键名 方便给前端的时候改键名

/** * 根据配置转换数组中的键名 * @param array $data 数据,必须为二维数组格式 [0=>[]] * @param array $keyNameMapArr 键名转换配置,key为旧的键名,value为新的键名,若找不到旧键名或者新旧键名一致则不进行转换 * @param bool $unsetOldKey 是否删除旧的键值对,默认是 * @return array */ public function changeKeyName($data, $keyNameMapAr

PHP数组关于数字键名的问题

以下是对PHP数组数字键名的几点总结: 键名长度只能在 int 长度范围内,超过int 范围后将会出现覆盖等混乱情况 在键名长度为 int 范围内存取值时,PHP会强制将数字键名转换为 int 数值型 数字键名长度大于19位时,将变成 0 键名正常长度时,字符串或数值类型一样 $i = 126545165; $arr['126545165'] = 'abc'; $arr[126545165] = 'uio'; var_dump($arr); echo '<br>'; var_dump(isse

VB-获取本机计算机名,登录名、ip地址

真的是很简单,执行结果:Computer:不平凡总在于坚持  User:Administrator  IP:192.168.0.111 '获取计算机名.用户名.本机ip Dim LocalInfo As String Dim strLocalIP As String Dim winIP As Object LocalInfo = LocalInfo & "  Computer:" & Environ("computername") LocalInfo

项目中阶梯费率解决方法,数组中通过键名查找键值

<?php $a = 3.5;$arr = array("1"=>4,"2.5"=>5,"5"=>6);//小数做键名,需要加引号$arr = array_flip($arr); foreach ($arr as $key => $value) { $b[] = $value;} 主要思路就是把数组翻转,取出原数组所有键名组成一维数组,判断出在哪个阶梯范围,再去反转的数组中array_search出对应的键值,这个键

c语言--二维数组的首地址问题

对于一个二组数组int a[3][4],以下几个地址值是相等的,但是地址类型不尽相同: 1)a 2)a[0] 3)*(a+0) 4)*a 5)&a[0][0] int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };printf("%x,%x,%x,%x,%x\n", a, (int *)a, *a, a[0], &a[0][0]); 结果如下: 把上面的地址各+1: printf("%x,%x,%x,%

python如何将数组分成几个区间,取每个区间的最大值存到另一个数组里

python如何将数组分成几个区间,取每个区间的最大值存到另一个数组里 贴吧上有人问python 问题:有一段数组,把它分成几个区间,取每个区间的最大值存到另一个数组里 比如数组a[1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,0] 看看python培训黄哥所写的2个方法. 第一种方法: # coding:utf-8"""黄哥python远程视频培训班https://github.com/pythonpeixun/article/blob/master/