C语言的数组和指针的区别

书本上的太混乱了,有没有哪位高人帮解答

举例说明:
int *p;
int p_arr[5];

p=p_arr; //p指向了p_arr

那现在,*p就是p_arr[0],对吧?
然后,p++, 现在*p是p_arr[1]了。
但是你不能写p_arr++,这是错误的,因为数组首部也是指针,但是是不能改变其值的,
你可以写*p_arr,这个没问题,其实就是p_arr[0],
如果你要p_arr[1]呢?就是 *(p_arr+1),这样写是合法的,但是p_arr的值绝对不能变。
就是说,数组名字其实也是一个指针,但是是指针常量。
普通的指针是变量。

最后,数组和指针更高级的注意点,你可以从 《高质量C和C++编程指南》这本书里面找到,同时这本书也会讲C语言其它方面的注意点,值得一看。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-24
因为strcat(a,b);要修改a指向的内存里的内容 而只需读取b所指向内存中的内容
char *a="fb";//a指向的"fb"是只读的 不能修改
char *b="fa";//这边也是只读的
如果改成
#include <iostream>
using namespace std;
int main()
{
char c[10]="fb";
char *a=c;
char *b="fa";

strcat(a,b);
printf("%s\n",a); //还有 这边输出字符串用的是指针 不要加*
cout<<strcmp(a,b);

}
第2个回答  2011-09-23
比如说你家住在 中国海洋大学 就相当于数组a,里面有3个人
a[2]={" you","your mother","your father"}

然后呢你家的门牌号是 山东青岛238号 (这个就相当于 a)

而*p=a
这个指针p呢就相当于 山东青岛238号这个门牌号。本回答被提问者采纳
第3个回答  2011-09-23
a和b都指向文字常量区,也就是说他们是常量指针,值是不能改变的,声明为数组的时候,值是存在栈区的,多关注下C语言内存分配知识。这是很重要的
第4个回答  2011-09-23
楼上的已经说的很明白了。我也没什么补充的了