第1个回答 推荐于2017-09-06
数组名绝对不等于指针,而且不是指针。
数组名是指针常量,地址是绝对的,score指向受保护,但首地址的内容可以改变,所以数组首地址应该是指针常量int *const score。
指针是一个变量,变量的值是另外一个变量的地址。那么,既然指针是变量,那么指针必然有自己的存储空间,只不过是该存储空间内的值是一个地址值,而不是别的内容。
第2个回答 2012-11-15
1、类型不匹配 "张三"是个字符串数组,
而xingming[50]只是数组中一个元素,
是char类型的、
这是数组初始化问题,任何数组都不允许这样初始化
2、数组在定义后,系统就会为其分配一个连续的存储空间,
而数组名对应这段连续存储单元的首地址,即第一个元素的地址,
这是个定值,是不能改变的,是个常量.
如果是个变量,那么变量是可以赋值的,比如int b = 1;
但是数组名是个常量,比如char xingming[50];的首元地址是100,
那么xingming就是500这个值,500 = 1,这样行吗,显然是不可以的,
即数组名不能赋值
所以数组名是个指针常量
第3个回答 2012-11-15
数组只能在定义的时候赋值,拷贝内存必须用到memcpy
memcpy(xingming, "张三");
这个跟指针常量没有关系,但数组可以看成是指针常量,因为指针可以++、--,但数组不行
举个例子:
int a[100];
a++; // 错误,数组不能+=
int* p = a;
p++; // 可以,因为p是个变量
const int* q = a;
q++; // 错误,因为q是个常量指针,指向的地址不可变
第4个回答 2012-11-15
char xingming[50]="张三"; //这样是对的
但
char xingming[50];
xingming[50]="张三";
这样是错的!
xingming[50]表示第51个数组元素(字符型),因此不能这样赋值