第7講 箱の住所を代入できる箱(ポインタ)の学習
第4話 ポインタと配列の関係
#include<stdio.h>
#include <stdlib.h>
void f();
void g();
int main(){
  f();
  g();
  return(0);
}
void f(){
  int x[5];
  for(int i=0;i<5;i++)x[i]=i+1;
  for(int i=0;i<5;i++)printf("%d ",x[i]);
  printf("\n");
}
void g(){
  int *x=(int *)malloc(sizeof(int)*5);
  for(int i=0;i<5;i++)x[i]=i+1;
  for(int i=0;i<5;i++)printf("%d ",x[i]);
  printf("\n");
}
コピペ用添付ファイル
実行画面
1 2 3 4 5
1 2 3 4 5


解説
答をずばり言ってしまいましょう。
基本ポインタは配列と同様に扱えるです。
つまり、
  int *x=(int *)malloc(sizeof(int)*5);

  int x[5];
と宣言するのと同じなのです。
(int *)malloc(sizeof(int)*5);
のmallocはメモリを確保させる命令です。
sizeof(int)*5のメモリ容量がint型の5つ分を示しています。
sizeof(int)でint型のサイズすなわち4バイト分です。
sizeof(int)*5で結局は4×5=20バイト分になります。
(int *)はint型のポインタであることを示しています。
  int *x=(int *)malloc(sizeof(int)*5);
によって、例えば
ouu
(もちろん、1000〜1004は1001以上1004以下です。他も同様です。)
のように20バイト分メモリ容量が確保されるわけです。
そして、それぞれの箱が順にx[0]からx[4]に対応して、
w
となるわけです。
では皆さん、
コードを
#include<stdio.h>
#include <stdlib.h>
void f();
void g();
int main(){
  f();
  g();
  return(0);
}
void f(){
  int x[5];
  for(int i=0;i<5;i++)x[i]=i+1;
  for(int i=0;i<5;i++)printf("%d ",x[i]);
  printf("\n");
}
void g(){
  int *x=(int *)malloc(sizeof(int)*5);
  for(int i=0;i<5;i++)*(x+i)=i+1;
  for(int i=0;i<5;i++)printf("%d ",*(x+i));
  printf("\n");
}
コピペ用添付ファイル
と変更したら実行画面はどうなりますか。

第3話へ
 第5話へ


a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ