使用#define对预处理程序指令的好奇心

Wor*_*ice 3 c

我正在练习#definetypedef.根据这个有效的讨论,我认为我对这个问题有很好的掌握.目前,我正在使用这个简单的代码块:

#include <stdio.h>

/*typedef char *string;       with typedef the code works correctly*/

#define string char *

int main(void){
    string a[] = {"I", "like", "to", "fight,"}, 
           b[] = {"pinch", "and", "bight."};

    printf("%s %s %s %s %s %s %s\n",
        a[0], a[1], a[2], a[3], b[0], b[1], b[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道这define给了预处理器指令.在这种情况下,替换stringchar *.因此,a正确声明为char *a[],而b[]不是!这个问题很容易解决

string b[] = {"pinch", "and", "bight."};
Run Code Online (Sandbox Code Playgroud)

但是我的教科书通过告诉读者#define可以通过精确添加 一个单一字符来实现代码来挑战读者.我一直无法找到解决方案.我只是为了好奇而向社区提出这个简单的问题.因此,提前感谢您的时间!

Mat*_*zak 5

这就是为什么你不应该使用宏,更换后你会得到:

char* a[] = {"I", "like", "to", "fight,"}, 
       b[] = {"pinch", "and", "bight."};
Run Code Online (Sandbox Code Playgroud)

其中a是指向字符的指针数组,b是字符数组.

这是如何申报工作,反例:

char* a, b;
Run Code Online (Sandbox Code Playgroud)

a是指向char b的指针是char,为了使它你必须写:

char* a, *b;
Run Code Online (Sandbox Code Playgroud)