关于字符串常量和字符串的问题,求解

上题目先。。。。

设有定义:#define STR "12345";,则以下叙述正确的是( )。

A、宏名STR代替的是数值常量12345
 B、宏定义以分号结束,编译时会产生错误信息
 C、宏名STR代替的是字符串"12345"
 D、宏名STR代替的是字符串常量"12345"
【答  案】C

表示我查了好久,也没查出什么个所以然来,为什么是选C而不是选D呢?这里定义的STR不就是相当于“12345”么?那么不就可以理解为所代替的字符串不可改变嘛?就如,字符串“1234”就不能用STR代替啊,而STR就只能代替“12345”嘛?可为什么不是这样的呢?
最新回答
失约

2024-11-07 00:11:54

  什么是字符串常量?常量是不能改变的。
  
字符串“1234”就不能用STR代替啊,而STR就只能代替“12345”嘛?

TR只能S替代“12345”?define的作用就是用来替代嘛,那你得知道用define的优点:

  1,你定义的STR是“12345”,以后需要用到“12345”的地方就不用再麻烦的用“12345”了,直接使用STR.或许你感觉不到它的方便,那你可以这样:#define PI 3.141592657 用到圆周率的时候你只需用PI就行了,不用再3.1412657...什么的打字了,或者这样: #define A "you can deal some date easiiy by this way". A是不是比这一坨打字方便多了?如果一个程序使用10000次 "you can deal some date easiiy by this way"你会觉得define真好。

2,你的程序里写的PI是3.141592657,可是如若有一天PI的值突然被公布是错的,应该是0.02,那你的程序用了PI的数值1000000次,你得改那么多次?no,这时候你以前用若了define,你只需把#define PI 3.141592657改成 #defne PI 0.02,就是这么随意。注意:这里PI的值改变了,你可以随便改。这就是它的作用。
孤独儛埗

2024-11-07 04:22:11

比如你char *p = "xxx";这样就是字符串了。
其实你说的"12345"也是字符串,但是为什么选C呢?
你看好题目,STR宏代替的是什么?宏的概念中没有什么常量变量的概念,宏定义就是替换,仅仅就是替换。你替换的是数值就是数值,你替换的是字符串就是字符串。

本身"12345"是字符串,但是STR替换的就是一个字符,因为宏就是替换而已,不设计什么常量变量。
我们说好的快乐呢

2024-11-07 00:09:15

字符串常量:字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符' \0'自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串常量在内存中应占(n+1)个字节
这里STR进行宏替换时,只会替换成字符串12345,不会再后面加'\0'的。
所以C。
孤独儛埗

2024-11-07 02:35:36

字符串常量貌似也要事先定义一个常量名
追问
STR算常量名么亲?
追答
STR是宏名,所以说那是字符串而不是字符串常量了啊