옵션 |
|
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
int i = 0;
unsigned long arr_size = 0;
printf("생성할 배열의 크기를 입력해주세요: ");
scanf("%lu", &arr_size);
int arr[arr_size]; memset(arr, 0, arr_size);
printf("\n");
for(int i = 0; i < arr_size; i++) {
printf("배열에 추가할 %d번째 숫자 입력: ", i);
scanf("%d", &arr[i]);
}
for(i = 0; i < arr_size; i++) {
printf("배열에 추가할 %d번째 숫자: %d\n", i, arr[i]);
}
return 0;
}
#include <stdio.h>
int main(int argc, const char * argv[]) {
int b[5] = {0, 1, 2, 3, 4};
int i = 0;
printf("b = %p = %d\n", b, *b);
for(i = 0; i < 5; i++) {
printf("b[%d] = %p = %d\n", i, &b[i], b[i]);
}
printf("\n");
for(i = 0; i < 5; i++) {
printf("b[%d] = %p = %d\n", i, b+i, *b+i);
}
return 0;
}
위의 코드를 실행하면 4바이트의 정수형 변수 a가 메모리의 어느 부분에 생성이 될겁니다. 그림으로 그리자면 메모리에 다음과 같이 위치하고 있을거에요. (가정)#include <stdio.h>
int main(int argc, const char * argv[]) {
int a;
return 0;
}
001 | 005 | 009 | 013 | 017 | 021 | 025 | 029 |
a |
그렇다면 코드가 위와같이 될 것이고, 메모리에 다음과 같이 위치하게 될 것입니다. (가정)#include <stdio.h>
int main(int argc, const char * argv[]) {
int a;
int b[5];
return 0;
}
001 | 005 | 009 | 013 | 017 | 021 | 025 | 029 |
a | b [0] | b[1] | b[2] | b[3] | b[4] | b[5] | |
void *malloc(size_t);
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
return 0;
}
int main(int argc, const char * argv[]) {
int* p;
return 0;
}
int main(int argc, const char * argv[]) {
int *p;
// sizeof(변수 또는 자료형)은 인자로 받은 변수 또는 자료형의 크기를 반환하는 함수입니다.
// 여기서는 정수의 크기 (int)가 필요하므로, sizeof(int)가 되겠죠?
int size_int = sizeof(int);
return 0;
}
int main(int argc, const char * argv[]) {
int *p;
int size_int = sizeof(int);
int size_int6 = size_int * 6;
return 0;
}
int main(int argc, const char * argv[]) {
int *p;
int size_int = sizeof(int);
int size_int6 = size_int * 6;
p = malloc(size_int6);
return 0;
}
int main(int argc, const char * argv[]) {
int *p;
int size_int = sizeof(int);
int size_int6 = size_int * 6;
p = (int *)malloc(size_int6);
return 0;
}
int main(int argc, const char * argv[]) {
int *p;
p = (int *)malloc(sizeof(int) * 6);
return 0;
}
자료형 *p;
p = (자료형 *)malloc(sizeof(자료형) * 할당크기);
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
int* p;
int i;
p = (int *)malloc(sizeof(int) * 4);
for(i = 0; i < 4; i++) {
p[i] = i;
}
for(i = 0; i < 4; i++) {
printf("p[%d] = %d\n", i, p[i]);
}
return 0;
}
리턴 값은 없고요, 파라메터로는 메모리에서 해제할 변수를 넘기시면 됩니다. 즉, 위의 코드에서는 다음과 같이 사용할 수 있겠습니다.void free(void *);
하지만 위는 그렇게 좋은 코드는 아닙니다. "free(p)"를 실행하였다고 하더라도, 메모리가 반환된 이후 그 부분이 사용되기 전까지는 그 값이 남아있기 때문이죠.#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
int* p;
int i;
p = (int *)malloc(sizeof(int) * 4);
for(i = 0; i < 4; i++) {
p[i] = i;
}
for(i = 0; i < 4; i++) {
printf("p[%d] = %d\n", i, p[i]);
}
free(p);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
int* p;
int i;
p = (int *)malloc(sizeof(int) * 4);
for(i = 0; i < 4; i++) {
p[i] = i;
}
for(i = 0; i < 4; i++) {
printf("p[%d] = %d\n", i, p[i]);
}
free(p); p = NULL;
return 0;
}
출처 | 제가 공부한 것들의 기억.... |