1. ホーム
  2. c

[解決済み] 初期化でポインタ対象の型から修飾語を捨てる

2022-03-11 08:19:03

質問

で参照した単一リンクリストのリストを印刷しようとしています。 リンクテキスト . うまくいくのですが、コンパイラの警告が出ます。

Initialization discards qualifiers from pointer target type

(start=headの宣言時)と

return discards qualifiers from pointer target type

(returnステートメントで)このコードで。

/* 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を使用しています。何かご意見はありますか?

解決方法は?

この部分です。

LIST *start = head;

この関数のパラメータは、定数へのポインタです。 const LIST *head これは、それが何を指しているかを変更できないことを意味します。しかし、上のポインタはnon-constへのものであり、それをデリファレンスして変更することは可能です。

である必要があります。 const も同様です。

const LIST *start = head;

戻り値の型も同様です。


コンパイラが言っているのは、「おい、お前は呼び出し側に対して『何も変えない』と言ったが、そのチャンスを広げているんだぞ」ということです。