我正在练习#define和typedef.根据这个有效的讨论,我认为我对这个问题有很好的掌握.目前,我正在使用这个简单的代码块:
#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给了预处理器指令.在这种情况下,替换string为char *.因此,a正确声明为char *a[],而b[]不是!这个问题很容易解决
string b[] = {"pinch", "and", "bight."};
Run Code Online (Sandbox Code Playgroud)
但是我的教科书通过告诉读者#define可以通过精确添加 一个单一字符来实现代码来挑战读者.我一直无法找到解决方案.我只是为了好奇而向社区提出这个简单的问题.因此,提前感谢您的时间!
这就是为什么你不应该使用宏,更换后你会得到:
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)