No.3ベストアンサー
- 回答日時:
ポインタの基礎をちょっとだけ触ってみましょう。
int num;を宣言し、仮にnum=139;としたとき。
printf("%d", num);の結果が139と表示されるのはご周知のとおりだと思います。
このとき、メモリ上にnumのデータが書き込まれている場所、それをアドレスといいます。
次に、int *p;と宣言したときpというポインタができます。
それでは、このポインタとは何なのか?抽象的にいってしまえば「どこでもドア」といったところでしょうか。
pという「どこでもドア」はこの時点では何にも行き先が指定されていないのでどこにもいけません。それではドラえもんが「numのデータがある場所に行きたい」としたときはp=#(&をつける事で&numはnumの場所の情報〔アドレス〕を表す)として「どこでもドア」pにnumまでの行き先を入力します。これで、numの場所までいけるようになりました。
printf("%d", *p);というように、pにアスタリスクを
つけるとドアの向こうはnumの値、つまり139がおいてありますのでこの情報をprintf()関数に渡すことになります。139が表示されます。ポインタの型はここではint型だったのでnumの型もint型でなければなりません。
char str[100]="Hello World";といった文字列配列を作ったとき、strというポインタができています。これは既にstr[0]のアドレスをさしています。
printf()関数で文字列を表示させるとき、printf(str);としたらHello Worldと表示されますstrのままだとstrのアドレス情報がprintf()関数に渡され、関数がそのアドレス情報を利用して表示しているのです。
関数などを自分で作ったりするうちにその便利さがわかってきます。長文、失礼しました。
sample.(そのままコンパイルして大丈夫です)
#include <stdio.h>
int main(void)
{
float *p, f;
f=20.3;
p=&f;
printf("*p = %f, f = %f\n", *p, f);
*p=14.9; /* pを通してfに新たな値を代入する事もできる */
printf("f の値が %f に書き換えられた", f);
return 0;
}
No.2
- 回答日時:
ポインタは、一言でいうと次のようになるでしょうか。
「ある型の変数や値の格納されている領域を指し示すためのもの (ポイントするもの = ポインタ)」
要するに、どこにその変数なり値なりが格納されているのか、その情報を持っているものということになります。
ま、実際には「格納されている領域を指し示すためのもの」として「アドレス」が使われているので次のように言い換えても良いと思います。
「ある型の変数や値のアドレス」
もう少し突っ込んで説明してみます。
まず最初に「ポインタ型」という型があります。
ポインタ型はそれだけで存在するのではなくて、「int型へのポインタ型」とか「char型へのポインタ型」というように、int型やchar型など元になる型があって、そこから派生する型です。
ポインタ型はint型やchar型と同じように「型」ですから、ポインタ型の変数とかポインタ型の値があります。
この「int型へのポインタ型」と「char型へのポインタ型」は別の型だということをしっかりと認識しておいてください。
たとえば、
--------------------------------------------------------
int* p_hoge; /* int型へのポインタ */
--------------------------------------------------------
と定義したら、p_hoge は「int型へのポインタ型の変数」になります。
また、次のようにすることでポインタ型の値を取得することができます。
--------------------------------------------------------
int hoge; /* int型の変数 */
int* p_hoge; /* int型へのポインタ */
p_hoge = &hoge;
--------------------------------------------------------
&hoge が「int型へのポインタ型」の値になるわけですが、実際にどのような値が設定されているかは、printf() で確認できます。
--------------------------------------------------------
int hoge; /* int型の変数 */
printf( "hogeへのポインタの値=%p\n", &hoge );
--------------------------------------------------------
おそらく 16進数 8桁の数値が表示されると思いますが、ここで表示されている値が「int型へのポインタ型の値」になります。
つまり、hoge という変数が格納されている場所を指すアドレスです。
ちなみに、一般に「ポインタ」といった場合、次の3つのどれかを指していることが多いように思います。
1. ポインタ型
2. ポインタ型の変数
3. ポインタ型の値
さて、実際にプログラミングする場合には、ポインタをアドレスだというふうに考えてプログラミングすることはほとんどないと思います。
ポインタ経由でそれが指している変数なり値なりを参照できる、というように考えることが多いと思います。
上記の例では「*p_hoge とすれば hoge に設定されている値を見ることができる」という感じです。
で、使われ方ですが、一番良く使うのは配列絡みのところでしょうか。
このあたりの説明をしだすと、また長くなりますので詳細は割愛します。
# ここまででも十分長くなっちゃったしねぇ。。。
単純に言うと C では配列を扱うのが苦手なので、関数の引数に配列を渡したい場合には、代わりに「配列の先頭要素へのポインタ」を渡すことになります。
これは C 特有の言語仕様による制約のようなものになりますが、C 言語以外でも使えるものとしては「リスト構造」を作る場合でしょうか。
同じ型の変数を数珠つなぎにリンクしていく構造をリスト構造といっていますが、次の変数にリンクするのにポインタが使われるわけです。
# リスト構造の詳細は、構造体も絡んでくるので割愛します。
こんな感じでいかがでしょうか。
# 長々と失礼しました。
No.1
- 回答日時:
Googleで「ポインタ」というワードで検索したら、たくさんでてきましたが。
ゆっくり、いろんなサイトの文章を読めばわかるはずです。。
参考URL:http://www.google.com/search?hl=ja&q=%E3%83%9D%E …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- C言語・C++・C# C言語 配列とポインタについて 2 2022/06/02 11:53
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- デスクトップパソコン 全画面表示でもタスクバーを前面に隠す、表示させるようにしたい 3 2022/03/23 12:30
- C言語・C++・C# いまc言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri- 3 2023/07/06 18:59
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(ブラウザ) Microsoft edgeのスクロールバーについて 2 2022/09/19 16:56
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- Excel(エクセル) VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。 3 2022/07/27 08:42
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
fopne で失敗する原因
-
C言語のポインタに直接アドレス...
-
C言語でのconstを返す関数
-
VB6でのgethostbyaddrの使用方...
-
戻り値で構造体を返すことは可...
-
エラーの意味
-
ハンドルはポインタか
-
Run-Time Check Failure #3とい...
-
入れ子の構造体について
-
main(int argc,char **argv[])...
-
TCHAR文字列内の検索について
-
連結リスト 要素の入れ替え
-
【なぜポインタを使うのか】
-
cv::Mat から vectorにコピー
-
[excel vba] マウスポインタの...
-
プログラミングのfarについて
-
構造体とfscanf
-
基本アルゴリズムの『返す』の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
C言語の関数と配列に関する質問
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
セグメントエラー
-
アプリを32bitから64bit移行
-
コンストラクタでnewを失敗した...
-
ExcelVBAでのkernel32(64bit)
-
Cで作成したDLL関数をVBから呼...
-
ハンドルはポインタか
-
DLL<->VB間での受け渡し(文字...
-
C言語でのconstを返す関数
-
ポインタについて
-
参照型で受け取った引数をポイ...
-
TCHAR文字列内の検索について
-
デバイスハンドルとは?
-
基本アルゴリズムの『返す』の...
おすすめ情報