整列
23289 ワード
<シナリオ>
※連続する項目が同じ大きさ順に並べられたデータの集合
1.同じ坪数で構成されたマンション
2. int x[5]; //4バイトの5家族
<プライマリアレイ>
※ int score[7];
1.配列名を作成するルールは、変数名を作成するルールと同じです.
2.アレイ宣言で使用されるラベルは正の整数であり、アレイのサイズ
3.score配列は7個の整数型データを格納できる
4.7個の空間を配列内の要素と呼ぶ
<アレイ要素の例>
#include <stdio.h>
int main(void)
{
int num[3]; <배열 선언시 첨자의 값은 배열의 크기>
num[0]=10; <배열 원소(element)의 첨자는 순서>
num[1]=20;
num[2]=30;
//num[3]=40; <num의 공간은 [0] [1] [2] 3칸이 끝이므로 오류가 발생한다>
printf("%d, %d, %d ",num[0],num[1],num[2]);
return 0;
}
<プライマリアレイの初期化>●一次配列を初期化する方法
▶int score[5]={10,20,30,40,50};//int x = 10;
●ワード配列の初期化方法
▶char name[ ]={'H','a','n',' ','S',' ','H','\0'};
▶char name[ ]="Han S H";
1.アレイを宣言しながら初期化を行う場合、8要素を省略可能
2.文字配列の最後の要素は空の文字"0"でなければなりません.
#include <stdio.h>
int main(void)
{
int score[5] = { 10,20,30,40,50 };
char name[] = { 'H','a','n'
,' ','S',' ','H',
'\0' };
char name1[] = "Han S H";
printf("%d %d %d\n", score[0], score[1], score[4]);
printf("%c%c%c%c%c\n", name[1], name[7], name[0],name[3],name[0]);
printf("%c%c%c%c%c\n", name1[1], name1[7],name1[0],name1[3], name1[0]);
return 0;
}
1.アレイ要素が初期化データの数より多い場合、残りの要素は0に初期化されます.#include <stdio.h>
int main(void)
{
int han[10] = { 10,20 };
int han1[2] = { 10,20,30 }; <error C2078: 이니셜라이저가 너무 많습니다.>
int han2[10] = {0};
printf("%d %d %d %d\n", han[0], han[1], han[2],han[9]);
printf("%d %d %d\n", han2[0], han2[1], han2[9]);
return 0;
}
<イニシアチブの初期化と置換>#include <stdio.h>
int main(void)
{
int han[10] = { 10,20 };<초기화>
int x = 10;
printf("%d %d %d %d\n", han[0], han[1],han[2],han[9]);
x = 20;
han[0] = 1; <대입>
han[1] = 2; <대입>
han[2] = 3; <대입>
printf("%d %d %d %d\n", han[0], han[1], han[2], han[9]);
return 0;
}
<最初の配列の名前:配列の開始アドレス><han1의 주소는 &han1[0]의 주소와 같다.>
#include <stdio.h>
int main(void)
{
int i;
int han1[3] = { 10,15 };
int han2[3];
for (i = 0; i < 3; i++)printf("han1[%d]=%d 주소=%p\n", i, han1[i], &han1[i]);
printf("han1=%p\n", han1); //&han1[0]
han2[0] = 10;
han2[1] = 20;
han2[2] = 30;
for (i = 0; i < 3; i++)printf("han2[%d]=%d 주소=%p\n", i, han2[i], &han2[i]);
printf("han2=%p\n", han2); //&han2[0]
return 0;
}
<プライマリアレイの利用>#include
<stdio.h>
int main(void)
{int i, sum = 0;
int score[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 };
for(i = 0; i < 10;i++)
sum = sum + score[i];
printf("평균=%f\n", sum / 10.);
return 0;
}
<2 Dアレイの初期化>#include <stdio.h>
int main(void)
{
int x[2][3] = { 10,20,30,40,50,60 };
printf("%d %d %d\n", x[0][0], x[0][1], x[0][2]);
printf("%d %d %d\n", x[1][0], x[1][1], x[1][2]);
printf("%d\n", x[2][3]); <오류는 나지 않지 않지만 엉뚱한 값이 나옴>
return 0;
}
<2 Dアレイの初期化と置換>#include <stdio.h>
int main(void)
{
int x[2][3] = { 10,20,30,40,50,60 };
printf("%d %d %d\n", x[0][0], x[0][1], x[0][2]);
x[0][0] = 1; x[0][1] = 2; x[0][2] = x[0][0];
printf("%d %d %d\n", x[0][0], x[0][1], x[0][2]);
x[1][0] = x[0][0] + 1;
x[1][1] = x[0][0] + x[0][1];
x[1][2] = x[1][0] * x[1][1];
printf("%d %d %d\n", x[1][0], x[1][1], x[1][2]);
return 0;
}
<2 Dアレイをプライマリアレイとして使用>#include <stdio.h>
int main(void)
{
int i, j;
int han[2][3] = { 10,20,30,40,50,60 };
for (i = 0; i < 2; i++) for (j = 0; j < 3; j++)
printf("han[%d][%d]=%d 주소=%p\n", i, j, han[i][j], &han[i][j]);
printf("han=%p\n", han); <첫 번째 원소의 주소>
printf("han[0]=%p\n", han[0]); <han[0]으로 시작하는 원소의 시작 주소>
printf("han[1]=%p\n", han[1]); <han[1]로 시작하는 원소의 시작 주소>
return 0;
}
<실행 결과>
han[0][0] = 10 주소 = 0051FA80
han[0][1] = 20 주소 = 0051FA84
han[0][2] = 30 주소 = 0051FA88
han[1][0] = 40 주소 = 0051FA8C
han[1][1] = 50 주소 = 0051FA90
han[1][2] = 60 주소 = 0051FA94
han = 0051FA80
han[0] = 0051FA80
han[1] = 0051FA8C
<文字レイアウトを初期化する方法>#include <stdio.h>
int main(void)
{
int i;
char st[] = "soft";
char ch[] = { 's', 'o', 'f', 't', '\0' };
for (i = 0; i < 5; i++)printf("st[%d] 주소 %p =%c\n", i, &st[i], st[i]);
for (i = 0; i < 5; i++)printf("ch[%d] 주소 %p =%c\n", i, &ch[i], ch[i]);
return 0;
}
<실행 결과>
st[0] 주소 010FFC60 = s
st[1] 주소 010FFC61 = o
st[2] 주소 010FFC62 = f
st[3] 주소 010FFC63 = t
st[4] 주소 010FFC64 =
ch[0] 주소 010FFC50 = s
ch[1] 주소 010FFC51 = o
ch[2] 주소 010FFC52 = f
ch[3] 주소 010FFC53 = t
ch[4] 주소 010FFC54 =
<文字列の初期化と整列>#include <stdio.h>
int main(void)
{
char eng[5] = "A BC";
char kor[6] = "하이a";
printf("%p:%c ", eng, eng[0]);
printf("%p:%c ", eng + 1, eng[1]);
printf("%p:%c ", eng + 2, eng[2]);
printf("%p:%c ", eng + 3, eng[3]);
printf("%p:%c\n", eng + 4, eng[4]);
printf("%s\n", eng);
printf("%p:%c ", kor, kor[0]);
printf("%p:%c ", kor + 1, kor[1]);
printf("%p:%c ", kor + 2, kor[2]);
printf("%p:%c ", kor + 3, kor[3]);
printf("%p:%c ", kor + 4, kor[4]);
printf("%p:%c\n", kor + 5, kor[5]);
printf("%s\n", kor);
return 0;
}
<실행 결과>
0073F970:A 0073F971 : 0073F972 : B 0073F973 : C 0073F974 :
A BC
<한글은 2바이트 인데 1바이트만 출력하므로 ?가 출력됨>
0073F960 : ? 0073F961 : ? 0073F962 : ? 0073F963 : ? 0073F964 : a 0073F965 :
하이a
<名前を入力出力するプログラム>#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char name[10];
printf("당신의 이름을 입력하세요=");
scanf("%s", name); //gets(name);와 차이점?
printf("당신의 이름은 %s입니다.\n", name);
return 0;
}
<5個の入力と出力名のプログラム>#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int i;
char name[5][10];
for(i=0;i<5;i++)
{
printf("당신의 이름을 입력하세요=");
scanf("%s",name[i]);
}
for(i=0;i<5;i++)
printf("당신의 이름은 %s입니다.\n",name[i]);
return 0;
}
#include <iostream>
int main(void)
{
int x;
int y = 10;
char a, b = 'A';
x = y;
std::cout << "x=" << x << " y=" << y << std::endl;
a = b;
std::cout << "a=" << a << " b=" << b << std::endl;
return 0;
}
<配列のコピーstrcpy()関数を使用>#define _CRT_SECURE_NO_WARNINGS <Visual Studio의 경우>
#include <iostream>
#include <string> <or string.h(clang++, gcc 등 주로 온라인 컴파일러)>
int main(void)
{
char s1[5];
char s2[5] = "soft"; <원본>
//s1 = s2; <error C3863: 배열 형식 'char [5]'은(는) 할당할 수 없습니다.>
strcpy(s1, s2); <s2주소의 문자열을 널 문자를 만날 때까지s1주소로 복사>
std::cout << "s1=" << s1 << " s2=" << s2<< std::endl;
return 0;
}
<ネコ類の例>#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string> <string.h>
using std::cout;
class Cat {
private: <생략가능>
int age;
char name[20];
public:
int getAge();
const char* getName();
void setAge(int a);
void setName(const char* pName);
};
int Cat::getAge()
{
return age;
}
void Cat::setAge(int a)
{
age = a;
}
void Cat::setName(const char* pName)
{
strcpy(name, pName);
}
const char* Cat::getName()
{
return name;
}
int main()
{
Cat nabi;
nabi.setName("나비");
nabi.setAge(3); <입력>
cout << nabi.getName() << " 나이는 "<<nabi.getAge()<<"살이다.";
return 0;
}
<ネコ類例2>#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using std::string;
using std::cout; <C>
class Cat {
private: <생략가능>
int age;
string name; <C>
public:
int getAge();
string getName();
void setAge(int a);
void setName(string pName);
};
int Cat::getAge()
{
return age;
}
void Cat::setAge(int a)
{
age = a;
}
void Cat::setName(string pName)
{
// strcpy(name, pName);
name = pName; <C>
}
string Cat::getName()
{
return name;
}
int main()
{
Cat nabi;
nabi.setName("나비");
nabi.setAge(3); <입력>
cout << nabi.getName() << " 나이는 "<<nabi.getAge()<<"살이다.";
return 0;
}
<オブジェクト配列>#include <iostream>
using std::cout;
class Dog{
private:
int age;
public:
int getAge(){return age;} <자동 inline함수>
void setAge(int a){age=a;} <자동 inline함수>
};
int main()
{
int i;
Dog dd[5]; <Dog클래스형 객체배열 dd, 강아지 5마리>>
for(i=0;i<5;i++){
dd[i].setAge(i);
cout<<dd[i].getAge(); <01234>
}
return 0;
}
<ポインタオブジェクト>#include <iostream>
using std::cout;
class Dog{
private:
int age;
public:
int getAge(){return age;}
void setAge(int a){age=a;}
};
int main()
{
Dog happy,*pd; <일반 객체 happy와 포인터 객체 pd, int x, *px;>
pd=&happy; //px=&x;
happy.setAge(5); <일반 객체는 '.'으로 멤버를 접근>
cout<< pd->getAge(); <포인터 객체는 '->'로 멤버를 접근>
return 0;
}
<オブジェクト配列とポインタ>#include <iostream>
using std::cout;
class Dog {
private:
int age;
public:
int getAge() { return age; }
void setAge
(int a) {
age = a;
}
};
int main() {
Dog dd[5];
Dog* pd;
pd = dd; <배열의 이름은 그 배열의 시작주소이다.>
for (int i = 0; i < 5; i++) {
pd -> setAge(i);
cout << dd[i].getAge();
cout << pd-> getAge();
pd++; <다음 방의 주소로>
} <011223344>
return 0;
}
Reference
この問題について(整列), 我々は、より多くの情報をここで見つけました https://velog.io/@totoromin0308/배열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol