•
파이썬 약타입 언어
•
C언어 강타입 언어
•
Array는 arr[0], arr[1], … 을 가리키는 포인터 변수로 저장
챕터 23 : 배열 2
문제
•
scanf에 주소를 주는 이유
◦
scanf도 함수이기 때문에 주소값을 전달해 줘야 변수값을 참조하여 저장할 수 있다.
// 문제 : 고객에게 숫자를 10개 입력받아서 배열에 넣기
// 조건 : 변수를 2개만 사용해주세요.
// 조건 : 포인터 문법을 쓸 수 없습니다.
/*
== 입력 ==
1번째 숫자를 입력해주세요 : 1[엔터]
2번째 숫자를 입력해주세요 : 2[엔터]
3번째 숫자를 입력해주세요 : 3[엔터]
4번째 숫자를 입력해주세요 : 4[엔터]
5번째 숫자를 입력해주세요 : 5[엔터]
6번째 숫자를 입력해주세요 : 6[엔터]
7번째 숫자를 입력해주세요 : 7[엔터]
8번째 숫자를 입력해주세요 : 8[엔터]
9번째 숫자를 입력해주세요 : 9[엔터]
10번째 숫자를 입력해주세요 : 10[엔터]
== 출력 ==
1번째 입력받은 숫자 : 1
2번째 입력받은 숫자 : 2
3번째 입력받은 숫자 : 3
4번째 입력받은 숫자 : 4
5번째 입력받은 숫자 : 5
6번째 입력받은 숫자 : 6
7번째 입력받은 숫자 : 7
8번째 입력받은 숫자 : 8
9번째 입력받은 숫자 : 9
10번째 입력받은 숫자 : 10
*/
#include <stdio.h>
int main(void) {
int arr[10];
for (int i=0; i<10; i++) {
printf("%d 번째 숫자를 입력해주세요 : ",i + 1);
scanf("%d", arr + i);
}
for (int i=0; i<10; i++) {
printf("%d번째 입력받은 숫자 : %d\n",i + 1,arr[i]);
}
return 0;
}
C
복사
// 문제 : 배열을 훼손하는 change 함수를 만들어주세요.
#include <stdio.h>
// 여기서 change 함수를 구현해주세요.
// 아직 미완성된 상태입니다. 마저 구현해주세요.
void change(int* p) {
*p = 200;
*(p + 1) = 400;
}
int main(void) {
int x[2];
x[0] = 100;
x[1] = 200;
//int x[2] = {100, 200}; // 위 3 줄 코드의 같은 의미이다.
printf("change 함수를 호출하기 전, x[0] : %d, x[1] : %d\n", x[0], x[1]);
// 여기서 change 함수를 실행해주세요.
change(x);
printf("change 함수를 호출하기 전, x[0] : %d, x[1] : %d\n", x[0], x[1]);
// 출력 => change 함수를 호출하기 전, x[0] : 200, x[1] : 400
return 0;
}
C
복사
// 문제 : 배열을 훼손하는 change 함수를 만들어주세요.(배열의 포인터)
#include <stdio.h>
void change(int** p) {
**p = 200;
*(*p + 1) = 400;
}
int main(void) {
int x[2] = {100, 200};
// x : 배열변수
// x의 값은 자동으로 x[0]의 주소값을 가진다.
// x == &x[0]
// x의 타입은 int* 이다.
printf("change 함수를 호출하기 전, x[0] : %d, x[1] : %d\n", x[0], x[1]);
int* p = x;
change(&p);
printf("change 함수를 호출하기 전, x[0] : %d, x[1] : %d\n", x[0], x[1]);
// 출력 => change 함수를 호출하기 전, x[0] : 200, x[1] : 400
return 0;
}
C
복사