我正在学习learning-c.org上的教程。关于Arrays and Pointers的部分,如果我在系统上运行示例程序的前两行,则会发出警告:
char vowels[] = {'A', 'E', 'I', 'O', 'U'};
char *pvowels = &vowels;
代码运行,但是我收到以下警告:
警告:从不兼容的指针类型'char(*)[5]中初始化'char *'] [-Wincompatible-pointer-types]15 | char * pvowels =&vowels;
如果我将其强制转换为],我可以摆脱此警告>
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));
}
我正在学习learning-c.org上的教程。关于数组和指针的部分,如果我在系统上运行它们,示例程序的前两行将发出警告:char vowels [...
使用&vowels
,您将获得一个指向数组本身的指针,该指针的类型为char (*)[5]
,如错误消息中所述。您似乎想要的是指向数组中first element
printf("&vowels[%d]: %p, pvowels + %d: %p, vowels + %d: %p\n", i, (void *) &vowels[i], i, (void *) (pvowels + i), i, (void *) (vowels + i));