求助:数组与指针的差别
在VC下运行时会出错,书上的内容看了好几遍,还是无法理解是在哪个地方出错。求指点。
程序代码:
# include <stdio.h> int main (void) { char * p1 = "Aaaaaaa"; *p1= 'B'; printf (" %s\n", "wwqrreqewr"); }
# include <stdio.h> # include <stdlib.h> int main (void) { char *p1 = "Aaaaaaa"; puts(p1); p1 = malloc(sizeof(char)); //这时p1已经不指向字符串常量了 指向一个闲置的内存地址 if(p1) *p1 = 'B'; putchar(*p1); free(p1); printf (" %s\n", "wwqrreqewr"); }
//把字符串常量中的每个字符分别赋给数组中的每个元素。数组名是指针常量,数组元素是变量。 char str[50] = "Bbbbbbb"; //把字符串常量中第一个字符的地址赋给char *类型指针。ptr1是指针变量。*ptr1是常量。 char * ptr1 = "Ccccccc"; str[0] = 'D'; //给常量赋值,正确。 *ptr1 = 'D'; //给常量赋值,错误。 str++; //常量不能自增运算,错误。 ptr1++; //变量可以自增运算,正确。 ptr1 = str;//虽然改变了指针变量ptr1的值,但是字符串“Ccccccc”其实并没有消失 ************************************ 如果编译器支持下面代码,那么输出结果会是Wcccccc char * ptr1 = "Ccccccc"; *ptr = 'W'; printf ("%s\n", "Ccccccc"); ************************************
//把字符串常量中的每个字符分别赋给数组中的每个元素。数组名是指针常量,数组元素是变量。 char str[50] = "Bbbbbbb"; //把字符串常量中第一个字符的地址赋给char *类型指针。ptr1是指针变量。*ptr1是常量。 char * ptr1 = "Ccccccc"; str[0] = 'D'; //给常量赋值,正确。 *ptr1 = 'D'; //给常量赋值,错误。 str++; //常量不能自增运算,错误。 ptr1++; //变量可以自增运算,正确。 ************************************ //ptr1 = str;//虽然改变了指针变量ptr1的值,但是字符串“Ccccccc”其实并没有消失 //如果编译器支持下面代码,那么输出结果会是Wcccccc char * ptr1 = "Ccccccc"; *ptr = 'W'; printf ("%s\n", "Ccccccc"); ************************************