C语言 数组与指针 遇到的问题

数组名字与指针在任何时候是否可以互换??注意是任何时候。。请详细解答下... 数组名字与指针在任何时候是否可以互换?? 注意是任何时候。。
请详细解答下
展开
 我来答
wangqiaoshi88
2011-01-06 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:52万
展开全部
首先先介绍一指针与数组的知识
指针:
指针是C语言的精华部分,通过利用指针,我们能很好地利用内存资源,使其发挥最大的效率。有了指针技术,我们可以描述复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,使程序的书写简洁,高效,清爽。但由于指针对初学者来说,难于理解和掌握,需要一定的计算机硬件的知识做基础,这就需要多做多练,多上机动手,才能在实践中尽快掌握,成为C的高手。 过去,我们在编程中定义或说明变量,编译系统就为已定义的变量分配相应的内存单元,也就是说,每个变量在内存会有固定的位置,有具体的地址。由于变量的数据类型不同,它所占的内存单元数也不相同。若我们在程序中做定义为: int a=1,b=2; float x=3.4, y = 4 . 5 ; double m=3.124; char ch1='a', ch2='b';不同数据类型的变量在内存中占用的空间
让我们先看一下编译系统是怎样为变量分配内存的。变量a,b是整型变量,在内存各占2个字节;x,y是实型,各占4个字节;m是双精度实型,占8个字节;ch1,ch2是字符型,各占1个字节。由于计算机内存是按字节编址的,设变量的存放从内存2000单元开始存放,则编译系统对变量在内存的安放情况如右图所示。
变量在内存中按照数据类型的不同,占内存的大小也不同,都有具体的内存单元地址,如变量a在内存的地址是2000,占据两个字节后, 变量b的内存地址就为2002,变量m的内存地址为2012等。对内存中变量的访问,过去用scanf("%d%d%f",&a,&b,&x)表示将数据输入变量的地址所指示的内存单元。那么,访问变量,首先应找到其在内存的地址,或者说,一个地址唯一指向一个内存变量,我们称这个地址为变量的指针。如果将变量的地址保存在内存的特定区域,用变量来存放这些地址,这样的变量就是指针变量,通过指针对所指向变量的访问,也就是一种对变量的“间接访问”。 设一组指针变量pa、pb、px、py、pm、pch1、pch2,分别指向上述的变量a、b、x、y、m、ch1、ch2,指针变量也同样被存放在内存,尽管所指向的变量类型不同,但是这些指针变量所占内存空间都是2个字节,而与所指向变量的类型无关。二者的关系如右图所示: 在上图中,左部所示的内存存放了指针变量的值,该值给出的是所指变量的地址,通过该地址,就可以对右部描述的变量进行访问。如指针变量pa的值为2000,是变量a在内存的地址。因此,pa就指向变量a。变量的地址就是指针,存放指针的变量就是指针变量。
数组:
关于可变长数组(VLA)的问题:原来的C标准中是不允许可变长数组出现的,也就是你说的那个n可变。但是在C99中,加入了对VLA的支持,也有不少编译器已经支持这个了,而且好像没有太多的人用这个可变长数组。 如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。 此处数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。 一个数组中的所有元素具有相同的数据类型(在在C、C++、Java中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、 字符串 、数值等等)。 可以声明任何基本数据类型的数组,包括用户自定义类型(请参阅 “再论编程”中的“创建自己的数据类型”)和对象变量(请参阅“用对象编程”)。 如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。 compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。 原型可以这样写(假设数组的元素是type):

当然,数组名是地址常量,而指针变量是存储地址的变量,举个例子吧:
char a[10],*p;
p=a;这样操作是可以的
百度网友1f7aaa0
2011-01-05 · TA获得超过216个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:166万
展开全部
不可以 你可以参照一下http://finally-mm.javaeye.com/blog/366166《数组名字与指针(C++)》的解释,C和C++中基本一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小白菜1120
2011-01-05
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
数组是静态的,而指针是动态的,并不是任何时候都可以,是否可以换,应该要看它们是怎样进行存储的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mileelove
2011-01-05 · TA获得超过454个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:326万
展开全部
看下面的定义
char[10] a;
char* pa;
1、让 pa = a;
则 *pa = a[0]; *(pa+1) == a[1] == *(a+1) ; 但是一般都不建议这样用,*(a+1)就把a当成了一个指针,但是一般都不建议这样使用。但是当传递数组作为函数的参数时,可以直接用指针代替
如函数声明:
int sum (int[] array);
等价于
int sum (int* array);
只是前一种更加直观一些。
所以,可以把数组的定义认为是一个单一的指针。
其他怎么用就看你了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式