字符串常量存储在字符常量区,当把字符串常量赋值给某一字符指针时,如下所示 : char * a = “xuexifeichangyouqu!”; 在这条语句执行时,字符串常量做了两件事。 第一 :字符串自身存储在 字符常量区 第二 :字符串常量把自己的第一个元素所在的内存地址(字符串首地址)赋值给字符指针 a 在这里我要解答第一个问题,为什么字符指针能指向一个字符串,其实在上面的分析中已经给出了答案,字符串返回的是其首元素的地址,很显然其首元素是一个字符,那么字符指针理所应当的可以指向它(一个字符串常量)。 下面针对这个问题展示代码 : #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int money = 0; char *color = “12”; //这两行对字符指针的赋值是可以省去的,仍然可行 char beautiful = “23”; char a[3]; char b[3]; printf(“你白吗?”); scanf("%s",a); fflush(stdin); color = a; / 为什么在这里可以这样写,有人可能会有疑问,前面不是说字符串常量不能改变吗? 其实这样写并没有改变字符串常量,而是改变了字符指针的指向而已,所以是可行的 */ printf(“请输入你的财产总额:”); scanf("%d",&money); fflush(stdin); printf(“你美吗?”); scanf("%s",b); beautiful = b; if(!strcmp(color,“白”) && money > 100 && !strcmp(beautiful,“美”)) printf(“你是白富美!”); else printf(“你不是白富美!”); return 0; }
下面是动态内存分配的做法,有兴趣请参考:
int main() { int money = 0; char *color=(char *)malloc(10); char *beautiful=(char *)malloc(10); printf(“你白吗?”); scanf("%s",color); printf(“请输入你的财产总额:”); scanf("%d",&money); printf(“你美吗?”); scanf("%s",beautiful); if(!strncmp(color,“白”,2) && money > 100 && !strncmp(beautiful,“美”,2)) printf(“你是白富美!”); else printf(“你不是白富美!”); free(color); free(beautiful); return 0; }