我正在尝试打印我在link text中提到的单链表的列表。它有效,但我确实得到了编译器警告:
Initialization discards qualifiers from pointer target type
(关于start = head的声明)和
return discards qualifiers from pointer target type
(在返回语句中)在此代码中:
/* Prints singly linked list and returns head pointer */
LIST *PrintList(const LIST *head)
{
LIST *start = head;
for (; start != NULL; start = start->next)
printf("%15s %d ea\n", head->str, head->count);
return head;
}
我正在使用XCode。有什么想法吗?
答案 0 :(得分:68)
这是这一部分:
LIST *start = head;
该函数的参数是指向常量const LIST *head
的指针;这意味着你无法改变它指向的内容。但是,上面的指针是非const;你可以取消引用它并改变它。
它也需要const
:
const LIST *start = head;
这同样适用于您的退货类型。
所有编译器都在说:“嘿,你对打电话者说'我不会改变任何东西',但你正在为此开辟机会。”
答案 1 :(得分:21)
在以下功能中,会收到您遇到的警告。
void test(const char *str) {
char *s = str;
}
有3种选择:
删除param的const修饰符:
void test(char *str) {
char *s = str;
}
将目标变量声明为const:
void test(const char *str) {
const char *s = str;
}
使用类型转换:
void test(const char *str) {
char *s = (char *)str;
}