포인터 : 주소값의 저장을 목적으로 선언되는 변수
& 연산자: 해당 피연산자의 주소값을 반환한다.(포인터 변수에 저장 가능)
int num = 7;
int * pnum;
pnum = #
int arr[3] = {0, 1, 2};
printf("배열의 이름: %p \n", arr); //배열의 이름: 0012FF50
printf("첫번째 요소: %p \n", &arr[0]); //첫번째 요소: 0012FF50
따라서 배열의 이름도 포인터이기에 배열의 이름을 피연산자로 하는 * 연산이 가능한 것이다.
char str1[] = "My String" // 변수 형태의 문자열
char * str2 = "Your String" // 상수 형태의 문자열

문자열은 저장된후 "무조건" 주소값이 반환된다.
int * arr1[20];
char * strArr[3] = {"Simple", "String", "Array"};

함수에서 배열을 인자로 전달할때 "주소값"을 전달한다.
이하 2개와 같이 인자로 받을 수 있다.
void access_array(int * param)
void access_array(int param[])
void access_array(int * param){
int i=0;
for(i=0; i<len; i++)
printf("%d", param[i]);
printf("\n");
}
int main(void){
int arr1[3]= {1, 2, 3};
access_array(arr1)
}
왜 scanf("%s", &str);을 하지 않을까? str은 문자열 즉 배열이기에 str이름자체가 그 주소이다.
따라서 scanf("%s", str);이 맞는 표현이다.
struct point
{
int xpos;
int ypos;
}
int main()
{
struct point pos1 = {1, 2};
struct point * pptr = &pos1;
printf("[%d, %d] \n", (*pptr).xpos, pptr->xpos); // 똑같은 값
}
(*pptr).xpos == pprt->xpos