No.2
- 回答日時:
・ポインタと配列はしまう場所は同じなのでしょうか?
どういう意味で?
ポインタは、変数のアドレスを指す変数、です。
単独では、「変数として使用することはできません。」(という理解でいてください)
必ず、他の変数が実体としてある時に、セットで使用するものです。
配列は、変数を複数個、いっぺんに扱うための仕組みです。
場所はどちらも、メモリ上です。
・単にしまい方、呼び出し方が違うだけなのでしょうか?
いろいろ違います。
・ポインタと使えるところでは配列も使えるのでしょうか?
使えません。
・そもそもしまわれる場所って何処なのでしょうか?
しまわれる場所って何ですか?
一応、表面的な使い方だけ。
普通の変数 int v;
配列 int a[10];
ポインタ int *p;
p = &v; // ポインタにv をセットする
a = &v; // 配列にvはセットできない
p = &a[0]; // ポインタに配列の先頭番地を割り当てる
p = a; // これも可能。ポインタに配列の番地を割り当てる
a[2] = 10; // 配列として扱う
p[2] = 10; // ポインタでも、配列のようにアクセスは可能だが・・・
p = &v;
p[2] = 10; // これもできてしまうため、注意が必要
p = a;
p++; // こうすると、pはa[1]の番地がセットされる
a++; // これはできない
No.3ベストアンサー
- 回答日時:
基本的な説明は、ポインタとは、アドレスのことで、配列は、ある変数の要素のあつまりを意味します。
Ex) 文字列100バイトの変数(str)があります。
● 配列 char str[100];
charの要素のデータが100個連続して領域を確保した。
実際は、100バイトの領域が確保されている。 100バイトの領域
● ポインタ char *str;
charの要素で扱う領域の先頭ポインタの変数をstrとして定義した。
実際は、文字列の先頭アドレスを格納さる領域が確保されている。 32bitマシンでは4バイトの領域
ポインタと配列はしまう場所は同じなのでしょうか?
A.基本的には、正解です。 但し、プログラミングの内容によっては、異なります。
Ex) 文字列100バイトの変数(str)があります。
このstrに文字をセットする場合は、下記の方法があります。
char str[100]; 配列
char *strp; ポインタ
●配列の場合
str[0] = 'A'; 配列strの0番目に'A'をセット
str[1] = 'B';
str[2] = 'C';
●ポインタの場合
memcpy(str, "ABC", 3);
☆ memcpyの引数1の属性はポインタです。
配列の名称を引数に指定した場合は、自動的にポインタ扱いです。
又は
*strp = (char *)str;
strp = 'A' strpが指すポインタに'A'をセット
(strp+1)= 'B' strpが指すポインタ+1に'A'をセット
(strp+2) = 'C'
上記のプログミングで、最終結果は同じとなります。
単にしまい方、呼び出し方が違うだけなのでしょうか?
A.基本的には、正解です。 但し、プログラミングの内容によっては、異なります。
ポインタと使えるところでは配列も使えるのでしょうか?
A.基本的には、正解です。 但し、プログラミングの内容によっては、異なります。
そもそもしまわれる場所って何処なのでしょうか?
A.『その領域にセットされる値』と考えて大丈夫です。
No.4
- 回答日時:
ポインタと配列はソースコード上の記述では交換可能なケースも多いですが、全くの別物です。
ポインタはレーザーポインタのように「指すもの」ということで、では何を指すのかと言えば「確保済みのメモリ」です。
従って、ポインタは宣言しただけでは使用できず何かしらのメモリ領域情報を与えてやらなければなりません。
このとき未確保のメモリを指すことが出来ないかと言えば出来る訳ですが、その中身へアクセスしようとした瞬間にまともなOSならアプリケーションエラーを発生させます。
一方の配列は「要素の集合体を整列してアクセス可能にしたもの」であって、宣言と同時に必要な量のメモリが確保されます。
ですから、
int a[10];
a[0] = 0;
と
int *a;
a[0] = 0;
では、コンパイルはどちらも通りますが後者の書き方で作成したプログラムはこの箇所でアプリケーションエラーになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
C言語でのconstを返す関数
-
TCHAR文字列内の検索について
-
エラーの意味
-
ハンドルはポインタか
-
セグメントエラー
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
c言語で任意のファイルから読み...
-
関数の引数をvoid*でキャストする
-
配列とポインタについて、 abc...
-
パスからファイル名を抽出
-
Run-Time Check Failure #3とい...
-
char* p char p &pの違は char ...
-
&str[i]のアドレスを上げながら...
-
プーさんのマウスポインタを教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
セグメントエラー
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
LPSTR型の初期化について
-
C言語でのconstを返す関数
-
ハンドルはポインタか
-
【C言語】戻り値が構造体の関数
-
nullポインタを逆参照とは?
-
基本アルゴリズムの『返す』の...
-
参照型で受け取った引数をポイ...
-
#define NULL ((void *)0) の弊害
-
アプリを32bitから64bit移行
-
ハンドル、アドレス、ポインタ...
-
デバイスハンドルとは?
-
C++で関数ポインタから関数名を...
-
Cで作成したDLL関数をVBから呼...
おすすめ情報