C言語:ポインタとメモリ空間

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
jetlee
記事: 1
登録日時: 10ヶ月前

C言語:ポインタとメモリ空間

#1

投稿記事 by jetlee » 10ヶ月前

<学習動画>
[ポインタとメモリ空間②/ドットインストール]
https://dotinstall.com/lessons/basic_c/9417

<開発環境>
OS:Windows10 64bit
開発環境:Visual C++ 2010 Express

C言語でポインタを使うコード(ファイル名:helloworld.c)を下記のとおり作成しました。コードを走らせようとすると下記のエラーメッセージが表示され、プログラムを実行することができません。コードの修正が必要な個所をご教示いただけたら幸いです。

コード:

1.#include<stdio.h>
2.int main(void){
3
4.	int a;
5.	a = 10;
6.
7.	int *pa;
8.	pa = &a;
9.
10.	printf("%d\n", *pa);
11.
12.	return 0;
13.}
<エラーメッセージ>
・helloworld.c(7): error C2143: 構文エラー : ';' が '型' の前にありません。
・helloworld.c(8): error C2065: 'pa' : 定義されていない識別子です。
・helloworld.c(8): warning C4047: '=' : 間接参照のレベルが 'int' と 'int *' で異なっています。
・helloworld.c(10): error C2065: 'pa' : 定義されていない識別子です。
・helloworld.c(10): error C2100: 間接指定演算子 (*) の使い方が正しくありません。

参照魚
記事: 28
登録日時: 1年前

Re: C言語:ポインタとメモリ空間

#2

投稿記事 by 参照魚 » 10ヶ月前

c言語は宣言はブロックの最初にまとめないとエラーになります。

コード:

int a;
int *pa;

a = 10;
pa = &a;
もしくは変数宣言と同時に初期化します。

コード:

int a = 10;
int *pa = &a;

box
記事: 1735
登録日時: 8年前

Re: C言語:ポインタとメモリ空間

#3

投稿記事 by box » 10ヶ月前

c言語は宣言はブロックの最初にまとめないとエラーになります。
開発環境によっては質問者さんのコードが正しく動くものもあります。
Cだからエラーになる、とは必ずしも言えません。
まあ、どの開発環境でも動くようにするには
「使う変数はブロックの最初で定義しておく」という方法が無難ではあります。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Bull
記事: 124
登録日時: 5年前

Re: C言語:ポインタとメモリ空間

#4

投稿記事 by Bull » 10ヶ月前

Visual C++ 2010 のコンパイラーは古いですからね。最近の物 (Visual Studio 2017) でしたら、そのままでもコンパイルエラーは出ないです。VC 2010 は規格としては古い (所謂 C89) ですが、最近の物は C11 をある程度サポートしていています。
特に理由がなければ、最新の物がいいと思います。
2017 では出ないとも言われましたが、Express Edition もあるようなので。

jetlee3

Re: C言語:ポインタとメモリ空間

#5

投稿記事 by jetlee3 » 10ヶ月前

>参照魚さん
教えて頂いた両方のパターンでプログラム実行できました。
・ブロックの最初にまとめる
・変数宣言と同時に初期化する

>boxさん
開発環境に依存する部分があるのですね。
"Visuial studio community 2017"を試しに導入して、
エラーが発生したコードを走らせたところ問題なく実行できました。

>Bullさん
コメント頂きありがとうございます。アドバイスを頂いた
"Visuial studio community 2017(Visual Studio 2017) "を導入しました。「Visual Studio>Visual C++>Windowsコンソールアプリケーション」にエラーが出ていたコードを読み込ませてみましたが、下記エラーが出て実行できませんでした。

※他の方からコメント頂いた方法
「使う変数はブロックの最初で定義しておく」でエラーを回避できましたので、開発環境の整備はいったん保留して、学習を先に進みたいと思います。ご提案頂きありがとうございました。開発環境は以後、Visual Studio 2017を使っていこうと思います。

行 1:ソースファイルを開けません "studio.h"
行10:識別子"printf"が定義されていません
行13:プリコンパイル ヘッダを検索中に不明なEOFが見つかりました。'#include "stdafx.h"'をソースに追加しましたか?

コード:

1.#include<stdio.h>
2.int main(void){
3
4.	int a;
5.	a = 10;
6.
7.	int *pa;
8.	pa = &a;
9.
10.	printf("%d\n", *pa);
11.
12.	return 0;
13.}

jetlee4

Re: C言語:ポインタとメモリ空間

#6

投稿記事 by jetlee4 » 10ヶ月前

コメント頂いたみなさん。ありがとうございます。
おかげさまで先に進むことができます。

返信

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