int F1(void) {
return 100, 200, 300 // 300 return
}
int main(){
char arr[4] = {4, 8, 8, 5};
Func(arr); // arr이 주소이므로 &arr 아님
}
int Func(char *ptr){
*ptr = 3;
*(ptr + 1) = 6;
ptr[2] = 9;
}
void Func(int *ptr){
int size;
size = sizeof(ptr) / sizeof(ptr[0]) // 1
return;
}
int main(){
int arr[7] = {0};
Func(arr);
}
Compiler는 이름 기준 오른쪽 방향 해석 -> 왼쪽 방향 해석
포인터배열, 배열포인터, 함수포인터, 이중포인터
포인터는 32 bit CPU 에서 4bytes다. 낚이지말자
포인터 배열 돌발문제 )
char *ptr[] = {"red", "orange", "pink", "white", "blue", "brown", "black", "gray"};
/*
**ptr = r
ptr[1] = orange
ptr[1] + 3 = nge
*(*ptr + 1)+1) = r
*(*(ptr+2)+1)) = i
ptr[3] + 2 = ite
*/
#include <stdio.h>
int main(){
int a = 10;
double b = 3.5;
void *vp;
vp = &a;
printf("a : %d\n", *(int *)vp);
vp = &b;
printf("b : %.1f\n", *(double *)vp);
}
#include <stdlib.h>
#include <string.h>
typedef struct person_t
{
char *name;
int age;
} Person;
void Normal_Copy_Test(void)
{
Person src = { NULL, 20 };
Person dest;
src.name = malloc(4);
strcpy(src.name, "JSH");
dest = src; // (X)
strcpy(dest.name, "AAA"); // (X)
printf("Src[%s], Dest[%s] \n",
src.name, dest.name);
}
void Deep_Copy_Test(void)
{
Person dest, src = { NULL, 20 };
src.name = malloc(4);
strcpy(src.name, "JSH");
dest.name = malloc(strlen(src.name) + 1);
strcpy(dest.name, src.name);
dest.age = src.age;
strcpy(dest.name, "AAA");
printf("Src[%s], Dest[%s] \n",
src.name, dest.name);
}
void main(void)
{
printf("========== Normal_Copy_Test ========== \n");
Normal_Copy_Test(); // AAA AAA
printf("\n\n\n========== Deep_Copy_Test ========== \n");
Deep_Copy_Test(); // JSH AAA
}