1
2
3
4
5
6
7
8
9
10
11
12
13
14
    char a[] = "hello"char b[] = "world"char c[] = "string";
    
    char* arrdata[] = { a,b,c };    //요소들이 char* 인 배열이다. 포인터가 아님!!
 
    char* *pndata = arrdata;        //char*의 주소 -> char **에 저장
    
    printf("%s\n"*(pndata+1)+1);
    printf("%c\n"*(*(pndata)+1));
 
    printf("%d", argc);
    for (int i = 0 ; i < argc; i++)
    {
        printf("%s\n"*(argv+i));
    }
cs
...더보기

3:

요소들의 자료형이 char*인 배열 arrdata를 선언 및 정의하는 부분.

요소들은 char 배열의 이름들이고, 배열의 이름은 배열의 첫번째 요소의 주소를 나타낸다.

따라서 char에 대한 포인터로 해석할 수 있다.

 

(int에 대한 주소를 저장하는 자료형 -> int *  /  char에 대한 주소를 저장하는 자료형 -> char*)

 

...더보기

5:

arrdata 는 char *인 요소들로 이뤄진 배열이고, arrdata의 이름은 char *가 저장된 주소를 가리키고 있다.

따라서 char *의 주소는 char ** 에 저장하므로.

pndata를 char**로 선언 및 정의한다.

 

...더보기

7:

서식지정자 %s로 출력하기 위해서 char배열의 주소값을 인자로 넣어야 한다.

pndata + 1 의 경우 pndata가 가리키고 있는 자료형이 char*로 4byte 이므로, pndata속에 저장된 arrdata의 주소에서 4만큼을 더한다. W의 주소값이 저장된 메모리의 주소(arrdata의 2번째 요소의 주소와 같다.) 가 되고, 그 주소에 간접지정을 취하면, W의 주소가 반환된다. (arrdata[2]와 같음)

 

여기서 +1을 하면 W의 주소는 char * 와 같으므로 o를 가리키는 주소가 반환된다.

 

...더보기

8:

서식지정자 %c로 출력하기 위해서 char형 데이터를 인자로 넣어야 한다.

*pndata 의 경우 *arrdata와 같고, arrdata의 주소에서 4바이트를 읽는다. 결국 char *형인 주소 a가 반환된다.

a에 +1을 하면, a는 char * 형이므로 1바이트 만큼 증가한 e의 주소를 얻게되고, 그 주소에 간접지정을 취하면 값 e가 반환되어서 e가 출력된다.

'Programing > 명강의 C' 카테고리의 다른 글

C 포인터 이해하기  (0) 2019.05.10
동적할당 이용  (0) 2019.05.07

+ Recent posts