データ構造(1)
6400 ワード
資料構造の学習📚始めましょう.
データ構造(Data Structure)はコンピュータです🖥 効率的に管理・構造化するために取り扱う資料の学問です.すなわち,資料を効率的に使用するために,資料の特性に応じて分類,組織,記憶,処理するすべての作業を行う.
ポインタは、メモリアドレスを値とする変数です.ポインタ変数は次のように宣言されます.
variable-nameは宣言されたポインタ変数の名前であり、*はvariable-nameがポインタ変数であることを示し、type-nameはポインタ変数variable-nameアドレスに格納されているデータ型を指定します.
演算子&は、変数からアドレスを抽出する演算子です.
配列の名前は、配列の開始アドレスを格納するポインタ変数である.
(ただし値は変更できません)
*aとa[0]は同義語です. であり、a[1]は(a+1)と同じであり、a[i]は(a+1)と同じである.
コードを見てみましょう.🧐
現在はint,char,long long資料型を用いている.各バイトの大きさから見ると、
したがって,int型のアドレスは4 byteをインクリメント,char型は1 byte,long long型は8 byteとする.
変数を宣言するのではなく、プログラムの要求に基づいてメモリを割り当てることができます. これを動的メモリ割り当てと呼びます. malloc関数を呼び出して動的メモリ割り当てを要求すると、必要な緊急メモリが割り当てられ、その開始アドレスが返されます. malloc関数の使用方法について説明します.🤔
mallocが返すアドレスはタイプのないアドレスです.したがって(int*)は整数を格納するための命令である.
次に、malloc(40)について説明します.40はバイト単位で割り当てるメモリサイズを指定します.ここでは、10個の整数を格納するために40バイトが必要です.intのバイトサイズは4であるため,10個の配列が生成される. malloc関数を使用すると、配列サイズが不足します. 動的に割り当てられたアレイは、空間が不足している場合に、より大きなアレイを割り当てて使用することができる. 育成配列のコードを簡単に理解しましょう.
この小さな配列の大きさを大きくするには、任意の配列tmpが必要である.上記のコードから、tmpは
1.概念と定義
データ構造(Data Structure)はコンピュータです🖥 効率的に管理・構造化するために取り扱う資料の学問です.すなわち,資料を効率的に使用するために,資料の特性に応じて分類,組織,記憶,処理するすべての作業を行う.
2.C言語のポインタ
컴퓨터의 메모리는 데이터를 보관하는 장소
바이트(8 bits) 단위로 주소가 지정됨
**모든 변수는 주소를 가짐**
ポインタは、メモリアドレスを値とする変数です.ポインタ変数は次のように宣言されます.
type-name * variable-name
variable-nameは宣言されたポインタ変数の名前であり、*はvariable-nameがポインタ変数であることを示し、type-nameはポインタ変数variable-nameアドレスに格納されているデータ型を指定します.
3 C言語の配列
포인터와 배열은 매우 긴밀히 연관되어 있다.
例えば、次のように宣言された配列aがあると仮定する.int a[10]
(ただし値は変更できません)
4.C言語におけるポインタ演算
#include <stdio.h>
int main()
{
int data[] = {1, 2, 3};
char data2[] = {'a', 'b', 'c'};
long long data3[] = {1, 2, 3};
int *p = &data[0];
char *q = &data2[0];
long long *r = &data3[0];
printf("%d %x\n", p, p);
printf("%d %x\n", p+1, p+1);
printf("%d %x\n", p+2, p+2);
printf("%d %x\n", q, q);
printf("%d %x\n", q+1, q+1);
printf("%d %x\n", q+2, q+2);
printf("%d %x\n", r, r);
printf("%d %x\n", r+1, r+1);
printf("%d %x\n", r+2, r+2);
return 0;
}
実行結果:215844684 cdd874c
215844688 cdd8750
215844692 cdd8754
215844649 cdd8729
215844650 cdd872a
215844651 cdd872b
215844656 cdd8730
215844664 cdd8738
215844672 cdd8740
コードを分析します.現在はint,char,long long資料型を用いている.各バイトの大きさから見ると、
int는 4byte
、char는 1byte
、longlong은 8byte
である.また%d는 10진수
%x는 16진수
です.したがって,int型のアドレスは4 byteをインクリメント,char型は1 byte,long long型は8 byteとする.
5.C言語における動的メモリ割当て
int *p;
p = (int *)malloc(40);
上のコードを簡単に理解してみましょう.mallocが返すアドレスはタイプのないアドレスです.したがって(int*)は整数を格納するための命令である.
次に、malloc(40)について説明します.40はバイト単位で割り当てるメモリサイズを指定します.ここでは、10個の整数を格納するために40バイトが必要です.intのバイトサイズは4であるため,10個の配列が生成される.
int *array = (int *)malloc(4*sizeof(int));
int * tmp = (int *)malloc(8*sizeof(int));
int i;
for(int i = 0; i<4; i++)
tmp[i] = array[i];
array = tmp;
最初のコードでは、配列は16バイトのサイズを生成します.sizeof関数はintサイズ4 bバイトを有し、4を乗じたので16バイトである.また,整数(int*)コードを用いたため,アレイには4つの配列が割り当てられた.この小さな配列の大きさを大きくするには、任意の配列tmpが必要である.上記のコードから、tmpは
8*sizeof(int)
のサイズを生成する.つまり32バイトです.8つのアレイのtmpは、コードarray = tmp
によってarrayに代入され、arrayは8*sizeof(int)
のサイズのアレイとなっている.Reference
この問題について(データ構造(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@kimku1018/자료구조1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol