宿題です 関数とポインタについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
モノクローム

宿題です 関数とポインタについて

#1

投稿記事 by モノクローム » 1年前

線形探索のプログラムの一部で,構造体リストから探索するための関数です.
が,警告が出てしまいました.

警告: ポインタと整数との比較を行なっています [デフォルトで有効]
if(&p->num==key){
と出てしまいます.
どうすれば直るのでしょうか.

listsearch(int *key)とすると警告: 1 番目の ‘listsearch’ の引数へ渡すときに整数からキャス ト無しにポインタを作成しています [デフォルトで有効]となってしまいました.

そもそもポインタについての理解が浅いので,的外れな質問をしていたらすみません.

コード:

int main(void){

  int key;

  gen_list();
  printf("key number : ");
  scanf("%d",&key);
  search_list(key);

  return 0;
}

コード:

int listsearch(int key)
{
  Node *p;
  while(p!=NULL){
    if(&p->num==key){
      printf("hit");
    }else{
      p=p->next;
    }
  }
  printf("key number not found\n");
  return 0;

}

maru
記事: 150
登録日時: 8年前

Re: 宿題です 関数とポインタについて

#2

投稿記事 by maru » 1年前

Node 構造体の内容がわからないと正しい回答ができないのですが、

コード:

typedef struct tagNode {
	int	num;
	struct tagNode*	next;
} Node;
であると仮定して、

コード:

    if(p->num==key){
とすればいいです(&が余分)。

なお、listsearch 関数で p が正しく初期化されていません。
先頭のポインタを引数で渡すなどの対策が必要です。

返信

“C言語何でも質問掲示板” へ戻る