“哲也”通过精心收集,向本站投稿了5篇什么是数组名,这次小编给大家整理后的什么是数组名,供大家阅读参考。
篇1:什么是数组名
什么是数组名
实际上数组名永远都不会是指针! 指针是C语言具有低级语言特征的最直接的证据,在汇编语言里面,指针的概念随处可见。比如SP,SP寄存器又叫堆栈指针,它的值是地址,由于SP保存的是地址,并且SP的值是不断变化的,因此可以看作一个变量,而且是一个地址变量。地址也是C语言指针的值,C语言的指针跟SP这样的寄存器虽然不完全一样,但原理却是相通的。C语言的指针也是一种地址变量,C89明确规定,指针是一个保存对象地址的变量。这里要注意的是,指针跟地址概念的不同,指针是一种地址变量,通常也叫指针变量,统称指针。而地址则是地址变量的值。
看到这里,也许你会觉得,这么简单的东西还用你来说吗?的确,对于p与&p来说,99%的人都能在0.1秒内脱口而出谁是指针,谁是地址,但是,又有多少人在使用指针的过程中能够始终如一毫不动摇地遵循这两个概念呢?不少人使用指针的时候就会自觉或不自觉地把指针和地址两个概念混淆得一塌糊涂了,数组名的滥用就是一个活生生的例子。这一点甚至连一些经典著作也没能避免。
不过也不能全怪你自己,笔者认为某些国内教材应该承担最大的责任。这些教材一开始就没有给读者好好地分清指针与地址的区别,相反还在讲述的过程中有意无意地混用这两个概念。更有甚者,甚至在书中明言指针就是地址!说这话的家伙最应该在C语言这个地图上抹掉,呵呵。两个月前我在购书中心随手翻开了某个作者主编的一本被冠以国家“十五”规划重点研究项目的书,书里就是这么写的。当时笔者就感慨:不知道又要有多少人的思想被这家伙“ ”了。
实际上,地址这个东西,本来就是一种基本数据类型,本应该在介绍整数、浮点、字符等基本类型的时候把地址显式地放在一起讨论,这样在后面介绍指针与数组的时候就能避免许多误解。可惜不少教材或者根本没有谈及,或者就算提起这个类型也用了指针类型这个字眼。这就错了,指针不是类型,真正的类型是地址,指针只是存储地址这种数据类型的变量!打个比方,对于
int i=10;
10是整数,而i是存储整数的变量,指针就好比这个i,地址就好比那个10。指针能够进行加减法,原因并不是因为它是指针,加减法则不是属于指针这种变量的,而是地址这种数据类型的本能,正是因为地址具有加减的能力,所以才使指针作为存放地址的变量能够进行加减运算。这跟整数变量因为整数能够进行加减乘除因而它也能进行加减乘除一个道理。
那么数组名又应该如何理解呢?用来存放数组的区域是一块在栈中静态分配的内存(非static),而数组名是这块内存的代表,它被定义为这块内存的首地址,
这就说明了数组名是一个地址,而且,还是一个不可修改的常量,完整地说,就是一个地址常量。数组名跟枚举常量类似,都属于符号常量。数组名这个符号,就代表了那块内存的首地址。注意了!不是数组名这个符号的值是那块内存的.首地址,而是数组名这个符号本身就代表了首地址这个地址值,它就是这个地址,这就是数组名属于符号常量的意义所在。由于数组名是一种符号常量,因此它是一个右值,而指针,作为变量,却是一个左值,一个右值永远都不会是左值,那么,数组名永远都不会是指针!不管什么话,只要说数组名是一个指针的,都是错误的!就象把刚才int i=10例子中的10说成是整数变量一样,在最基本的立足点上就已经完错了。
总之要牢牢记住,数组名是一个地址,一个符号地址常量,不是一个变量,更不是一个作为变量的指针!
在数组名并非指针这个问题上,通常会产生两种疑问:
1。作为形参的数组,不是会被转换为指针吗?
2。如果形参是一个指针,数组名可以作为实参传递给那个指针,难道不是说明了数组名是一个指针吗?
首先,C语言之所以把作为形参的数组看作指针,并非因为数组名可以转换为指针,而是因为当初ANSI委员会制定标准的时候,从C程序的执行效率出发,不主张参数传递时复制整个数组,而是传递数组的首地址,由被调函数根据这个首地址处理数组中的内容。那么谁能承担这种“转换”呢?这个主体必须具有地址数据类型,同时应该是一个变量,满足这两个条件的,非指针莫属了。要注意的是,这种“转换”只是一种逻辑看法上的转换,实际当中并没有发生这个过程,没有任何数组实体被转换为指针实体。另一方面,大家不要被“转换”这个字眼给蒙蔽了,转换并不意味着相同,实际上,正是因为不相同才会有转换,相同的话还转来干吗?这好比现在社会上有不少人“变性”,一个男人可以“转换”为一个女人,那是不是应该认为男人跟女人是相同的?这不是笑话么。
第二,函数参数传递的过程,本质上是一种赋值过程。C89对函数调用是这样规定的:函数调用由一个后缀表达式(称为函数标志符,function designator)后跟由圆括号括起来的赋值表达式列表组成,在调用函数之前,函数的每个实际参数将被复制,所有的实际参数严格地按值传递。因此,形参实际上所期望得到的东西,并不是实参本身,而是实参的值或者实参所代表的值!举个例来说,对于一个函数声明:
void fun(int i);
篇2:数组名、指针和地址
首先看这个:
#include
首先是关于a和&a:
#include
后来自己写了些东西:
#include
现在来试着解释一下,解释点对应代码中的注释序号: 01、www.cnblogs.com/y041039/archive/2012/04/11/2442345.html 这篇博客里对数据的储存做了很好地说明,可以解释这一点 我的电脑用的显然是Little Endian,这么一来, 实际数据为:(十六进制下) 12 31 23 12 45 64 56 45 78 97 89 78 00 00 00 04 00 00 00 05 内存中的数据应为:(第一行是标号,第二行是数据,同样在16进制下) 0x22ff————2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 12 23 31 12 45 56 64 45 78 89 97 78 04 00 00 00 05 00 00 00 ?? ?? ?? ?? 另外一点要了解的是,*(int *)((int)a + i)的意思,(int)a将a的地址转化成int类型(注释12), 然后(int)a + 1是地址加一,这个一是真正的一,不按照int的大小加四(注释13),(int *)((int)a + i)再将int类型的地址转化为指向int的地址(也就是16进制),也就是0x22ff31(注释14),最后取内容,
数组名、指针和地址
,
那么输出结果也就明白了: 0x22ff30: 12312312 0x22ff31: 45123123 0x22ff31: 56451231 . . . 注意高位的零被省略了: 0x22ff3a: 00047897——>47897
02、这里指出了&a的含义:依然是数组的地址(特殊的地址),但是表示了长度,所以后面的加一直接加上了一个数组的长度(也就是20, 转化为十六进制就是14),输出就是0x22ff30 + 14;
03、这里就说明了02中&a的特殊性,相当于自己指向自己?所以取内容仍然是自己;
04、取两次,取第一次是地址,再来一次是地址上的内容;
05、这里是为了验证04的正确性;
06到11都是对上述的实验,注意ptr1的类型决定了地址偏移的大小(-1就是-1个int长度);
12到15还行吧,不太难;
16、这个时候ptr2的地址是0x22ff31那么由01中的解释,*ptr2就是45123123,转化为十进制就是1158820131;
17、16中已讲到;
剩下的几个就是对01的验证了。
注意到这么一道题:
这么一来就没什么问题了,&a + 1指的是数组最后一位的下一个地址,而ptr1[-1] = *(ptr1 + (-1)),也就是数组最后一位,内容是5; 而这个时候的数组值为:(注意进制) 00 00 00 01 00 00 00 02 00 00 。。。 在内存中:(注意进制) 01 00 00 00 02 00 00 00 03 00 。。。 这样一来a的地址对应的是上面的第三个00,转化为int,加一(真正的一),也就是第三个00的下一个——02,再将它转化为指向int的,也就是00 00 00 02,真实值(16进制)02000000,也就是2000000。篇3:什么是
问题:什么是 ? 是什么意思?
的化学名称叫哌替啶,是人工合成的 代用品,其盐酸盐为白色结晶状粉末,无嗅,能溶于水和乙醇,一般制成针剂,
什么是
,
www.HacK50.com-找入门资料就到
篇4:什么是 ?
在 ( t.qq.com ) ,每个人都是一个电台,可以对外广播也就是发微博,也可以收听别人,用140个字写下你正在做什么.想什么,然后广播,所有你的听众朋友就能收听到,无论再忙再远也能和自己的朋友彼此守望。当然,你还可以收听其它有趣的人,获得新消息,明星的生活趣事.媒体机构的最新消息等等,
所以微博不但是你传递思想的平台,更是你接受信息的窗口。
篇5:什么是
问题:什么是 ? 是什么意思?
应该是一种正规、健康的保健活动,它和其他类保健一样,对身体是有百利而无一害,它甚至有很多其他保健都不具备的保健功效,
什么是
。由于现代城市发展节奏的加快,越来越多的城市男女的身体压力和心理压力剧增,而这种“压力”在他们的朋友或周围环境中又得不到“释放”,再加上一些不正规保健场所的误导,导致了一大批消费者在概念上的错误理解,尤其是年轻人受到的伤害更深,给家庭生活(夫妻生活)带来了很多的麻烦,
HacK50.com-是最好的入门资料网站
正规 是一种在人的体表进行适当微动的一种保健方法,其施术手法颇多,动作轻柔,运用灵活,便于操作,适用范围甚广,不论男女老幼、体质强弱、有无病症,均可得到显著的保健效果。正规 给消费者会带来很多好处,尤其是夫妻感情和谐。比如皮肤得到护理、避免皮肤干燥和骚痒,借助按摩师的手法使各类精油很快进入身体的脂皮层,改善血液循环,增强细胞再生、排出体内毒素,有助于新陈代谢,增强性功能,通过按摩师对全身经络施以特殊的手法,使全身大小血管畅通,达到瘦身、护肾、卵巢保养(女士)、避免血栓等目的。
www.HacK50.com-找入门资料就到
★ 什么是诗歌创作
★ 什么是论文
★ 教学计划是
★ 什么是贬义词
★ 什么是万圣节
★ 制度是
★ 什么是人工制品?
★ 什么是教案
★ 什么是教学计划
★ 什么是工伤事故?
什么是数组名(精选5篇)




