合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: モノクローム
[URL]
Date: 2017年11月15日(水) 04:10
No: 1
(OFFLINE)

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

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

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

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

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

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
int main(void){
 
  int key;
 
  gen_list();
  printf("key number : ");
  scanf("%d",&key);
  search_list(key);
 
  return 0;
}



コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
 
}

Name: maru
[URL]
中級者(14,188 ポイント)
Date: 2017年11月15日(水) 04:33
No: 2
(OFFLINE)

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

Node 構造体の内容がわからないと正しい回答ができないのですが、
コード[C++]: 全て選択
1
2
3
4
typedef struct tagNode {
    int num;
    struct tagNode* next;
} Node;
であると仮定して、
コード[C++]: 全て選択
1
    if(p->num==key){
とすればいいです(&が余分)。

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[19人]