数组与指针的区别,详细点,谢了。

DelphiStudy 2003-05-16 06:52:34
UP
...全文
122 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangning5168 2003-05-17
  • 打赏
  • 举报
回复
mutexking说的其实很对,慢慢的在编程中体会吧,一定有收获的。
baobaowang 2003-05-16
  • 打赏
  • 举报
回复
mark
MelodyCanFLY 2003-05-16
  • 打赏
  • 举报
回复
关注!!
mlsmls0129 2003-05-16
  • 打赏
  • 举报
回复
头一个人对我的帮助不小啊
以前我感觉也是很难记最重要的是记住运算符的优先级!
mutexking 2003-05-16
  • 打赏
  • 举报
回复
指针更更类似于数组名,我觉得将指针与数组名比较记忆更好点。
指针和数组名都是一个地存内址的指向,通过对两者的使用,都可得到该地存地址上的值,但所不同是的,指针更低层一些,其仅仅是指向内存地址的标示,而数组却被c语言赋予了更大的含义。
我们谈数组,更多的将其理解为一组确定数的集合,而数组名就是这组数的头一个,通过数组名的下标的变化则可顺序访问所有的数组成员,但我们可能谈问这些成员,当走到最后一个数的时候,c系统就不会让你往下走的,否则报错,而指针而不然,他的使用是相当灵活的,你可以将其指向一个单独的变量,也可以将其与动态分配内存命令合起来使用的话,你就可以用指针实现数组名的郊果。
如果你想应试,告诉你几个重要,区别应该是可以混过去的。
1由指针定义的数组是无限空间
2用c命令定义的数组是有限空间的
3在使用时,数组名和指针可等同视之
数组名就是指针,指针就是数组名。
见例:
int a[8],*b,u,v;
b=a;
u=a[2];
v=*(b+2);
此时u与v的值是一样的。
Muf 2003-05-16
  • 打赏
  • 举报
回复
1: int* 和 int[], 其中 int[] 其实是 int const*
即 int* p; p 可以赋值,如 p=NULL;
int a[3]; a 不可以赋值,如 a=NULL; 是错误的。因为a是常量。
2: sizeof操作不一样,请见 greening(逆风寒翎) 的说明
greening 2003-05-16
  • 打赏
  • 举报
回复
一列火车叫做a,有10节,所以叫做a[10],其中每一节叫做a[0]a[1]......a[9](看起来很象火车吧:)所以在作为数组时,sizeof(a)=4*10=40,相当于它的容量;在作为指针看的时候(相当于你有知道这列火车的站台号(地址)的车票),sizeof(a)=4,只有这个火车头的大小。
arcsiny 2003-05-16
  • 打赏
  • 举报
回复
自己看书吧
看不明白以后怎么学习
遇到实在不懂的问题再来问比较好
DelphiStudy 2003-05-16
  • 打赏
  • 举报
回复
谢谢,我找了这样的话,更糊涂了,唉。。。。。。
DelphiStudy 2003-05-16
  • 打赏
  • 举报
回复
数组指针 AND 指针数组
作者:bood


C语言中最容易使人头脑发昏的东西之一就是指针, 而关于指针的类型定义也是一件让人烦恼的东西。比如,下面的两个定义到底干了什么:char *a[10],还有这个:char (* a)[10]。呵呵,感觉如何?

实际上,前者(char *a[10])定义的是一个指针数组,而后者(char (*a)[10])指的却是一个指向数组的指针,且被指的数组有十个元素组成。原因很简单,因为运算符‘[]’的优先级高于指针运算符‘*’。

那怎么才能记住这个呢?当然,根本的办法就是去记住运算符的优先级,然而,C语言的运算符优先级可不是这么一两个哦,你得花点时间上去才行。我这里倒有一个方法,这是从一位网友那儿学来的 :我们可以做一个定义:#define char* PCHAR,这么一来,char *a[10]就变成PCHAR a[10]了,哈哈,真好理解!

顺便说一下,在强制类型转换时,要转换成数组指针要这么干:(char (*)[])少了星号两边的括号可不行。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧