質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

8537閲覧

C言語で2つのポインタでデータとアドレスを表示するコードのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/11/06 03:42

編集2017/11/12 05:34

###前提・実現したいこと
C言語で2つのポインタでデータとアドレスを表示するというコードを書いています。イメージの図は以下の様です。
イメージ説明

コンパイル時に以下のようなエラーが出ています。

###発生している問題・エラーメッセージ

C

1% gcc -Wall ex2_2_1.c -o ex2_2_1 2ex2_2_1.c: In function 〓〓〓main〓〓〓: 3ex2_2_1.c:9:7: error: conflicting types for 〓〓〓p〓〓〓 4 int p = 5; 5 ^ 6ex2_2_1.c:5:7: note: previous declaration of 〓〓〓p〓〓〓 was here 7 int*p; 8 ^ 9ex2_2_1.c:10:7: error: conflicting types for 〓〓〓a〓〓〓 10 int*a; 11 ^ 12ex2_2_1.c:4:7: note: previous definition of 〓〓〓a〓〓〓 was here 13 int a = 10; 14 ^ 15ex2_2_1.c:14:10: warning: format 〓〓〓%d〓〓〓 expects argument of type 〓〓〓int〓〓〓, but argument 2 has type 〓〓〓int *〓〓〓 [-Wformat=] 16 printf("value of a =%d\n", a); 17 ^ 18ex2_2_1.c:15:10: warning: format 〓〓〓%p〓〓〓 expects argument of type 〓〓〓void *〓〓〓, but argument 2 has type 〓〓〓int〓〓〓 [-Wformat=] 19 printf("address of a =%p\n", p); 20 ^

###該当のソースコード

C

1#include<stdio.h> 2int main(){ 3 //a 4 int a = 10; 5 int*p; 6 p = &a; 7 8 //p 9 int p = 5; 10 int*a; 11 a = &p; 12 13 //print 14 printf("value of a =%d\n", a); 15 printf("address of a =%p\n", p); 16 printf("value of p =%d\n", p); 17 printf("address of p=%p\n", a); 18 return 0; 19} 20

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同じプログラム内で同名の変数を使っているからです。
int*pの変数名は*pではありません。pです。

error: conflicting types for ‘p’

『pについて型の競合が発生しています』⇒『なんかpの型が違うんだけどなんで?』

printf("addressofp=%a\n", a);

これに関しては完全に勘違いしていると思います。
%dなどのフォーマット指定子は出力形式に対応しているので、変数名に合わせる必要はないです。

エラーの再現

C

1int main(void) { 2 int a; double a; 3 return 0; 4}
>gcc c.c -Wall c.c: In function 'main': c.c:2:19: error: conflicting types for 'a' int a; double a; ^ c.c:2:9: note: previous declaration of 'a' was here int a; double a; ^ c.c:2:19: warning: unused variable 'a' [-Wunused-variable] int a; double a;

別にポインタに限った話ではないということがわかるかと思います。

投稿2017/11/06 03:47

編集2017/11/12 06:27
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/12 05:36

ご回答いただきましてありがとうございます。 printfの型については学習し直して理解しました。 変数名は今回の場合、図のようにaとpのみを用いてコードを書くことはできないという理解でよろしいでしょうか。
LouiS0616

2017/11/12 06:04

そうですね。完全に名前が被ってしまっていますから。 ポインタは用途がちょっと特殊なせいで難しそうに見えますが、その実態はただの数値です。 int a; double a;と書いてエラーが起きるのと一緒です。
退会済みユーザー

退会済みユーザー

2017/11/12 07:46

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問