No.2ベストアンサー
- 回答日時:
for(i=0;i<5;i++){
*p[i]=0; /*ポインタp[i]の指す値を初期化*/
}
ここが極めてヤバい。
このforループを実行する直前の時点では、
p[i]にはよく訳の分からない謎のアドレスが入っているわけです。
*p[i]とはそのアドレスの指す中身ですから、
訳の分からないアドレスに入っている対象を、
勝手に中身を0に初期化しているわけです。
ポインタをヌルポインタに初期化したいのなら、
p[i]=0;
ですね。
ただし、その場合でも最後の
for(i=0;i<5;i++){
q[i]=*p[i];
}
でヌルポインタの指す値を参照していますので、
ヤバいことには変わりありません。
No.5
- 回答日時:
ポインタ変数の概念を理解できていない人の典型だと思われます。
回答は他の人がやってるのでアドバイスだけ。
おそらく
int a;
と
int *a;
でどのようにメモリが確保されるかの違いが理解できていないのでは無いでしょうか?
私自身が昔そうでしたから。
int a;
とすると、「int型の整数を格納する為のメモリ」が確保されます。
int *a;
は「int型の整数を格納する為のメモリ」を参照する為の「アドレスを入れる為だけのメモリ」が確保されます。
重要なのは「int型の整数を格納する為のメモリ」そのものは確保されないということ。
まずこの概念が理解でき無いとダメです。
ポインタを理解するにはデバッカなどを使って実際にメモリの値を見ながらやると解かりやすいのですが、身近に詳しい人が居ないとなかなか難しいですね。
No.4
- 回答日時:
こんにちは
エイリアスの質問ですか?
私だったらこう書く。
#include <stdio.h>
int main(void){
double *p;
double q[5], a, b;
int i;
a = 5;
b = 6;
for(i = 0; i < 5; i++){
if(i==1) q[i]=a;
else if(i==3) q[i]=b;
else q[i]=0;
}
p=q;
for(i = 0; i < 5; i++)
printf("%lf ", p[i]);
// p[i]は*(p+i)かq[i]か*(q+i)でも良い。
return 0;
}
No.3
- 回答日時:
こういうことが、したいのかな?
#include <stdio.h>
int main(void)
{
int *p[5];
int q[5], a, b, i;
for(i = 0; i < 5; i ++) q[i] = i;
for(i = 0; i < 5; i ++) p[i] = &q[i];
for(i = 0; i < 5; i ++) printf("%d ", *p[i]);
putchar('\n');
a = 5;
b = 6;
p[1] = &a;
p[3] = &b;
for(i = 0; i < 5; i ++) printf("%d ", *p[i]);
return 0;
}
No.1
- 回答日時:
> q[1]=5,q[3]=6
になりますが、
> *p[i]=0;
p[i]の指し示すところに0を代入しようとしてます。
このときのp[i]は、初期化されてないので、メモリ破壊を起こす可能性が高いです。
また運よくp[]が0クリアされたとしても、
> q[i]=*p[i];
で、アドレス0にアクセスしようとして、メモリアクセス違反になるかと。
DOSなら、ならないかもしれませんが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の関数と配列に関する質問
-
セグメントエラー
-
fopne で失敗する原因
-
main(int argc,char **argv[])...
-
ポインタ同士の割り算
-
C/C++言語 の 浮動小数点定数/...
-
popenした子プロセスのプロセス...
-
VC++6.0 MFC ダイアログバーを...
-
参照型で受け取った引数をポイ...
-
voidポインタ
-
DLL<->VB間での受け渡し(文字...
-
c言語で任意のファイルから読み...
-
C言語での`void**`の意味
-
C言語で構造体の参照渡しができ...
-
init関数の意味
-
C言語、配列とポインタとアスタ...
-
C言語のポインタとスタックポイ...
-
ポインタのポインタを引数にも...
-
x64プログラムでアドレスが32bi...
-
C言語 ポインタ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
C言語の関数と配列に関する質問
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
ExcelVBAでのkernel32(64bit)
-
main(int argc,char **argv[])...
-
アプリを32bitから64bit移行
-
連結リスト 要素の入れ替え
-
ハンドルはポインタか
-
Cで作成したDLL関数をVBから呼...
-
C言語でのconstを返す関数
-
NULLとブランクの違い
-
エラーの意味
-
DLL<->VB間での受け渡し(文字...
-
ハンドル、アドレス、ポインタ...
-
【C言語】戻り値が構造体の関数
おすすめ情報