C言語で構造体と肩を並べるレベルで難しいポインタの理屈が分かるスレッド

C言語で構造体と肩を並べるレベルで難しいポインタの理屈が分かるスレッド

大魔王 2024-04-02 03:45:57
通報
#include <stdio.h>
int main(void){

int a = 0;
int b = 0;

int *p = &a;

int **pp = &p;

int ***ppp = &pp;

*p += 10; // a += 10と同じ(+=は「○○ずつ変える」という意味がある。1ずつなら++のみでいい。)

**pp += 20; // a += 20と同じ

***ppp += 30; // a += 30と同じ

a += 40; //ここまで計算するとaには100入ってるので他のポインタ変数も変数aの値(100)と同じ値になる。

printf("*p = %d **pp = %d ***ppp = %d a = %d\n",*p,**pp,***ppp,a);

*p += 20; // a += 20と同じ

**pp += 30; // a += 30と同じ。ここまでの計算でaは150に。

p = &b; // *p が記憶する変数のアドレスを a → bへ変更(bの初期値は0なのでまた0から始まる。今度は「int」がついてないのでアドレス代入時はポインタ変数にアスタリスクは付けない。)

*p += 10; // b += 10と同じ

**pp += 20; // b += 20と同じ

***ppp += 30; // b += 30と同じ

b += 40;

printf("*p = %d **pp = %d ***ppp = %d  a = %d b = %d\n",*p,**pp,***ppp,a,b);

}
 
実行結果は実際にこのコードをコピペして確かめてね。
 
もうポインタはこうやって考えたほうがいいかも。
 
まず今回はポインタのポインタのポインタだから
 
***ppp→**pp→*p→&a(通常変数aのアドレス)
 
***pppは**ppを指していて
その**ppは*pを指していて
さらにその*pは通常変数aのアドレスを指しているってことだ。
つまり、*pが通常変数aのアドレスを記憶しているなら
**ppや***pppも通常変数aと同じように使えるっていうことだな。
まぁ難しい事は考えず
*p や **pp や *ppp などのポインタ変数は
まずは通常変数と同じものとして考えるほうがいいかもな。
当然だが、*pの記憶しているアドレスをa→bに変えると
当然、*pも変数bとまったく同じものとして扱われるってこと。

ちなみにだが、

int a = 0;(これが通常変数)
 
int *p = &a; (ポインタ変数。*pはaのアドレスなのでaと同じように扱える)
 
a += 100;
 
この場合、ポインタ変数を100ずつ変えてないのに
printfでポインタ変数の値を表示すると
通常変数aと同じく「100」と表示されるのも
*pは通常変数aのアドレスを記憶しているため、
当然、*pはaの値と同じになる。

*p→&a→a = 100(aのアドレス)

  • No.1 by 大魔王  2024-04-02 04:11:13

ふん、今さら理解できたところで
もう専門学校あと1年で卒業だってのに。
うーん…
何で専門学校入る前からちゃんと自分から調べて
基礎から学ばなかったんだろうか。
俺って本当にバカやなぁ。
まぁポインタはゲーム系の企業で就職する時に必須だから
無理にでも覚えたけど
果たしてこれがゲームのプログラムに活かせるのだろうか…。

  • No.2 by 大魔王  2024-04-02 04:14:30

ポインタは習得するのに苦労したな。
俺、プログラムに関する知能指数ゼロだからバカだし、
意味が分かれば
こんなに簡単なプログラムを覚えるのに
もう2年も
時間を無駄にしちゃってるんだよなぁ。
あと1年で就職始まっちゃうかもしれないのに。
誰かに助けてもらわないと疑問が解決しない事もあるし
頭が悪いと自分の力で何とかできないのが辛いなぁ。

  • No.3 by 大魔王  2024-04-02 04:16:32

それにDXライブラリ使ったゲームの作り方とか
教えてもらってないんだよなぁ。
ポインタ覚えるのになんだかんだで2年かかってるし
どうやってこんな絶望的な状況で
ゲーム制作してポートフォリオ出せばいいのだろうか…。

  • No.4 by 阿田岡ゆーすけ9653  2024-04-02 05:48:56

夢とか自演ばかりやん
大魔王、岸鷲やってて楽しい?

  • No.5 by 阿田岡ゆーすけ9653  2024-04-02 05:50:34

大魔王って一般人だったやなwつまらん小説のつづきは?

  • No.6 by 匿名さん  2024-04-02 06:48:44

大魔王くんたちは自作自演ばれてもやりつづける理由あんの?

ニックネーム: 又は匿名を選択:
トリップ: ※任意 半角英数8-16文字
下げ おやくそく
※トリップに特定の文字列を入力することで、自分だけのIDが表示されます
※必ずおやくそくのページの内容をご理解いただいた上でご投稿ください
※顔文字など、全角の漢字・ひらがな・カタカナを含まない文章は投稿できません。
※メールアドレスや電話番号などの個人情報や、メル友の募集、出会い目的の投稿はご遠慮ください




Copyright コミュティア All Rights Reserved.
スレッドを作る



トピック名


ニックネーム

(ニックネームはリストから選択もできます: )

トピック本文


トリップ ※任意 半角英数8-16文字



※トリップに特定の文字列を入力することで、自分だけのIDが表示されます
※メールアドレスや電話番号などの個人情報や、メル友の募集、出会い目的の投稿はご遠慮ください
おやくそく



管理人室
ご意見・ご要望はこちらへ