포인터 - 예제 및 해결
1) 포인터도 기본 값 초기화가 가능하다.
#include "Header.h"
int main() {
int* pointer = nullptr;
if (pointer == 0) {
printf("zero value 를 갖고 있습니다.");
}
else {
printf("포인터는 실제 주소를 가르키고 있습니다.");
}
return 0;
}
2) 0-value

3) free 이후에는 포인터 값이 이상한 값으로 초기화 된다. 그래서 포인터 주소값일 잘못 되지 않게 nullptr; 을 선언해준다.
3-1)일반적인 함수 벨류 0 초기화 예제 코드
#include "Header.h"
int main() {
int* pointer = nullptr;
pointer = (int*)malloc(sizeof(int));
*pointer = 10;
if (pointer == 0) {
printf("zero value 를 갖고 있습니다.");
}
else {
printf("포인터는 실제 주소를 가르키고 있습니다.\n");
printf("%d", *pointer);
}
free(pointer);
pointer = nullptr;
return 0;
}
3-2) 구조체 예제코드
#include "Header.h"
struct Marine {
int hp = 40;
int atk = 6;
};
int main() {
Marine* marine = nullptr;
marine = (Marine*)malloc(sizeof(Marine));
return 0;
}
3-3) 구조체 포인터의 배열 예제코드
#include "Header.h"
struct Marine {
int hp = 40;
int atk = 6;
};
int main() {
Marine* marine[40] = { nullptr, };
printf("%d", marine[0]);
return 0;
}
3-4) 좀 더 복잡한 코드
#include "Header.h"
struct Marine {
int hp = 40;
int atk = 6;
};
int main() {
Marine* marine[40] = { nullptr, };
for (int i = 0; i < 40; i++) {
marine[i] = (Marine*)malloc(sizeof(Marine));
marine[i]->hp = 40;
marine[i]->atk = 7;
}
for (int i = 0; i < 40; i++) {
printf("marine[%d].atk = %d\n", i, marine[i]->atk);
}
return 0;
}
4) 0 value로 값을 초기화 해서 쓴다

예제코드)
#include "Header.h"
int main() {
int myArray[10] = {0,};
for (int i = 0; i < 10; i++) {
printf("myArray[%d] = %d\n", i, myArray[i]);
}
return 0;
}
5) 포인터의 포인터 - 이중포인턴데 구조체면 동적 할당 된 1차원 배열로 보면 된다.

예제코드)
#include "Header.h"
struct Marine {
int hp = 40;
int atk = 6;
};
int main() {
//Marine* marine[20];
Marine** marine;
marine = (Marine**)malloc(sizeof(Marine*) * 20);
for (int i = 0; i < 20; i++) {
marine[i] = (Marine*)malloc(sizeof(Marine)* 4);
for (int k = 0; k < 4; k++) {
marine[i][k].atk = 9;
}
}
for (int i = 0; i < 20; i++) {
for (int k = 0; k < 4; k++) {
printf("marine[%d][%d]->atk = %d\n", i,k, marine[i][k].atk);
}
}
return 0;
}
6) 함수의 파라미터의 포인터

예제코드)
#include "Header.h"
void foo(int* a, int count) {
for (int i = 0; i < count; i++) {
printf("%d\n", a[i]);
}
}
int main() {
int myArray[5] = {4, 6 ,10, 20, 100};
foo(myArray,5);
return 0;
}
7) const char*

예제코드)
#include "Header.h"
void foo(const char* str) {
printf("%c", str[1]);
}
int main() {
foo("Hello World");
return 0;
}
8) 파라미터의 const char*

예제코드)
#include "Header.h"
void foo(const char* str) {
printf("%c", str[1]);
}
int main() {
char* str = (char*)malloc(sizeof(char) * 12);
strcpy(str, "Hello World");
foo("Hello World");
return 0;
}

(malloc 함수의 리턴타입이 void* 입니다)
예제코드)
#include "Header.h"
void foo(const char* str) {
printf("%c", str[1]);
}
int main() {
char* str = (char*)malloc(sizeof(char) * 12);
strcpy(str, "Hello World");
foo("Hello World");
void* vp = str;
return 0;
}