主题:请教char数组与char指针的区别
nana_aoe
[专家分:60] 发布于 2011-09-23 09:48:00
先写一个范例
[code=c]
char a[3] = {1,2,3};
char* b = a;
printf("%d,%d\n",a,b);
printf("%d,%d\n",sizeof(a),sizeof(b));
printf("%d,%d\n",a[0],b[0]);
[/code]
我对char数组和char指针就搞得不是很清了。
数组名本身就是数组首地址,那么它就应该是个指针吧?我打印他们的数值是相等的,
b指针也可以当数组名用,a数组名可以当指针用
但是sizeof时又是不等的,
这时,我就搞不懂,数组名到底是一个什么东西。这里是否与sizeof的机制有关系呢?
望各位大虾给解释一下,a和b的最根本区别,一个是指针一个是数组的话就不要说了。
最后更新于:2011-09-23 09:49:00
回复列表 (共17个回复)
沙发
bruceteen [专家分:42660] 发布于 2011-09-23 11:49:00
数组名本身就是数组首地址
--- 瞎扯,数组名就是数组名
我打印他们的数值是相等
--- 数值相等,只代表数值相等,不代表其它任何意义
比如 int a=1, b=1。
此时 a 和 b 数值相等,能代表a就是b吗?
比如 int a=0; char& b=*(char*)&a;
此时 a 和 b 数值相等,且 &a 和 &b 数值也相等,能代表a就是b吗?
b指针也可以当数组名用
--- 瞎扯,只能说在部分场合下 指针 和 数组 行为一致。
板凳
windy0will [专家分:2300] 发布于 2011-09-23 19:04:00
指针是基本数据类型,和int float差不多。数组可以理解为数据结构,和队列 栈类似。数组指定了数据存储方式:在连续的空间中存一系列数据。数组名还有一层意义,存储的那一系列数据的首地址。
3 楼
fragileeye [专家分:1990] 发布于 2011-09-23 19:32:00
windy0will兄,关于数组理解为数据结构,我不很赞同[em12]
4 楼
windy0will [专家分:2300] 发布于 2011-09-23 19:47:00
[quote]windy0will兄,关于数组理解为数据结构,我不很赞同[em12][/quote]
呵呵,那个只是我个人的看发,也说说你的理解吧。
5 楼
fragileeye [专家分:1990] 发布于 2011-09-24 14:11:00
[quote][quote]windy0will兄,关于数组理解为数据结构,我不很赞同[em12][/quote]
呵呵,那个只是我个人的看发,也说说你的理解吧。[/quote]
呵呵,我是以其他角度考虑的。我觉得数组本身没有结构的概念,而栈,队列,除了包含一段用以操作的空间外,还有对这段空间的描述,如length什么的。
6 楼
windy0will [专家分:2300] 发布于 2011-09-26 20:57:00
呵呵,我查了下百度, 都说 数据结构要包括逻辑结构。如果从这方面来考虑,数组个数据确实没有很明显了逻辑结构。
我以前认为只要是 "把数据按照某种方式组织起来" 都是数据结构(也包括C语言中的字符串),还认为数据结构和算法没有太大的差别,所谓算法,就是寻找一种合适的数据结构来解决问题。看来是错的了。
7 楼
cgl_lgs [专家分:21040] 发布于 2011-09-27 12:17:00
其实也不能完全说不对吧,记得有一本《数据结构与算法导论》的书说过,其实数组相当于线性表。
8 楼
cgl_lgs [专家分:21040] 发布于 2011-09-27 12:18:00
个人认为关键还是看东西的角度:)
9 楼
cyan_cong [专家分:0] 发布于 2011-09-28 14:26:00
就是的 只不过我们平时用的都是在栈中的 数组 顺序存储的
10 楼
cyan_cong [专家分:0] 发布于 2011-09-28 14:33:00
int a[10];
int *p=a;
int *q=&a;
a 是数组元素的首地址,&a 是整个数组的首地址 (虽然它们的值相同,但意义不同)
可以试一下 p+1 和 q+1 区别
数组和指针之间没有关系,只不过有时是指向同一块内存,操作起来差不多
我来回复