当前位置: 代码迷 >> C语言 >> 数组与指针的区别,求助
  详细解决方案

数组与指针的区别,求助

热度:110   发布时间:2007-01-29 12:56:07.0

这个就要理解了
int *p,a[10];
p=a
a是数组的首地址//它的值是不能变的
p是指向数组的指针//它的值是可以变的


----------------解决方案--------------------------------------------------------
以下是引用hiaod在2007-1-28 18:31:00的发言:
其实楼主的问题并不是编译器的问题,除了2楼指出的原因外,还有就是对指针定义的格式没有领会。
char a[]="abcde";
char *p=a;         /* 这是合法的。  */

char *a="abcde";
char *p=a;         /* 这也是合法的。 */

但如果用:

char *a="abcde";
char *p=*a;

却是非法的。

另外,3楼的说法:“1. 在上面的代码中,ca是一个字符数组,你可以对数组元素进行修改,而指针p指向一个字符串常量,它是不可修改的(如果对其修改,这种行为是未定义的);”也有不妥之处,指针指向的字符串常量也可以修改。
例如:

main()
{ char *p = "Welcomt to C";
*(p+2)='h';
puts(p);
}

显示的是:Wehcomt to C

那只是你的编译器允许了这种形为,并不代表别的编译器允许,因为语言标准没有定义这种行为,也就是说,各个编译器可以任意实现。比如,有的编译器会把该指针指向的字符串放在不可修改的代码段,此时运行就会发生段错误
----------------解决方案--------------------------------------------------------

  相关解决方案