看下这程序就懂了!呵呵
#include
#include
int main(void)
{
char *p1[] = {"abc", "de"};
char p2[][8] = {"2abc", "2de"};
char *p3 = "3abc";
char p4[] = "4abc";
int i;
p1[1] = "aaa";
//错误 p1[1][1] = 'b';
//错误 strcpy(p1[1], "p1");
printf("p1:\n");
for (i = 0; i < 2; i++) {
printf("%s\n", p1[i]);
}
//错误 p2[1] = "bbb";
strcpy(p2[1], "p2"); //可以了
p2[1][1] = '9'; //这样可以了
printf("\np2:\n");
for (i = 0; i < 2; i++) {
printf("%s\n", p2[i]);
}
p3 = "3def";
//错误 p3[2] = '0';
//错误 strcpy(p3, "p3");
printf("\np3 is %s\n", p3);
//错误 p4 = "4def";
strcpy(p4, "p4"); //可以了
p4[0] = 'f'; //这样可以了
printf("p4 is %s\n", p4);
return 0;
}
总结就是指针和数组的差别。指针指向的是一个内存区域,属于间接访问。数组是直接访问。
对于p3指向字符串常量"3abc",常量的位置内容不可以更改,但是指针所指的内存可以更改。
对于p4数组,就是一个内存区域,是程序运行后分配的,内容可以改,所以就可以按位赋值,也可以使用strcpy操作。p4也是指针,指向数组首地址。但是,p4不可变,相当于p4是常量指针,指向的位置只能是p4数组所分配的空间。p4 = "4def"使p4指向字符串常量"4def"所在的内存就错了。
阅读(674) | 评论(0) | 转发(0) |