TOP > チャットちゃっと

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



▼下へ

自分のスレッドを作る
■: 大魔王
[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のアドレス)


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

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

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

4: 阿田岡ゆーすけ9653 
[2024-04-02 05:48:56] [×]
夢とか自演ばかりやん
大魔王、岸鷲やってて楽しい?

5: 阿田岡ゆーすけ9653 
[2024-04-02 05:50:34] [×]
大魔王って一般人だったやなwつまらん小説のつづきは?

6: 匿名さん 
[2024-04-02 06:48:44] [×]
大魔王くんたちは自作自演ばれてもやりつづける理由あんの?


▲上へ



名前: 下げ

トリップ:  ※半角英数8-16文字以内

お約束
※トリップを入力すると、自分だけのIDが表示されます




[0]チャットちゃっとTOP
[1]チャットちゃっと
[9]最新の状態に更新
(C)コミュティア