关于字符串常量无法改变我的个人见解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hnujunjie/article/details/90450732

字符串常量存储在字符常量区,当把字符串常量赋值给某一字符指针时,如下所示 :
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;
}

猜你喜欢

转载自blog.csdn.net/hnujunjie/article/details/90450732