【发布时间】:2020-01-09 09:24:40
【问题描述】:
我正在学习 learn-c.org 上的教程。来到关于Arrays and Pointers 的部分,如果我在我的系统上运行示例程序的前两行,它们会发出警告:
char vowels[] = {'A', 'E', 'I', 'O', 'U'};
char *pvowels = &vowels;
代码运行,但我收到以下警告:
警告:从不兼容的指针类型“char (*)[5]”初始化“char *”[-Wincompatible-pointer-types] 15 | char *pvowels = &元音;
如果我将它转换为
,我可以摆脱这个警告char *pvowels = (char *) &vowels;
但这是否是处理该警告的正确方法,只是强制执行它?一开始似乎没有必要,我不太明白char * 和char (*) 之间的区别。
接下来,printf 行对第三个参数发出警告,说:
警告:格式“%u”需要“unsigned int”类型的参数,但参数 3 的类型为“char *”[-Wformat=]
(参数 5 和 7 相同)
这个我什至不知道如何投射以绕过警告......打印这个的正确方法是什么?
他们教程中的整个程序供参考:
char vowels[] = {'A', 'E', 'I', 'O', 'U'};
char *pvowels = &vowels;
int i;
// Print the addresses
for (i = 0; i < 5; i++) {
printf("&vowels[%d]: %u, pvowels + %d: %u, vowels + %d: %u\n", i, &vowels[i], i, pvowels + i, i, vowels + i);
}
// Print the values
for (i = 0; i < 5; i++) {
printf("vowels[%d]: %c, *(pvowels + %d): %c, *(vowels + %d): %c\n", i, vowels[i], i, *(pvowels + i), i, *(vowels + i));
}
【问题讨论】: