본문 바로가기

공부/c언어

main함수의 인자

반응형
 char a[4] = "123";

 printf("%s\n", a);

 

위에서 a는 문자열 123을 시작주소를 나타냄

%s는 시작주소를 알려주면 그 시작주소부터 \0가 나오기 전까지의 문자들을 화면에 출력해 줌

 

char* a = "123";

//char* a;

//a = "123"; 

printf("%s\n", a);

 

위에서 a는 문자열 123을 시작주소를 나타냄

%s는 문자열의 시작주소를 알려주면 그 시작주소부터 \0가 나오기 전까지의 문자들을 화면에 출력해 줌(%s의 특징은 문자열의 시작주소를 인자로 받는다는 것이다)

 

char* a = "123";

문자열 123은 read-only영역에 저장되어짐

a는 read-only영역에 저장된 문자열 123의 시작 주소를 가지고 있음

read-only영역에 저장된 문자열 123은 변경될 수 없음

 

*a = '5';

와 같이 문자열123에 내용중 문자1을 문자5로 변경할 수 없다

 

char* a = "123";

*a = '5';

 

위에서 2번째줄의 *a의 의미

a = 문자열의 시작주소(=문자1의 주소)

* = 가지고 있는 주소을 따라가서 그 주소안의 저장된 내용을 봄

*a = *(문자열의 시작주소) = 문자열의 시작주소에 찾아가서 그 안에 저장되어 있는 내용(=1)

 

 

 

아래 부분 이해를 위해서 위의 부분을 먼저 이해할 것

=========================================================================================================

 

main(int argc, char* argv[])에서
char* argv[]는 char* argv의 배열이다

명령어 실행시 인자가 들어오게 되게됨

 

명령어 실행을

start 1.jpg 2.jpg 이라고 실행했다고 하면

 

argc는 3이다

char* argv[0]      char* argv[1]       char* argv[2]

[                ]      [                 ]      [                 ]

        |                        |                          |

       ∨                      ∨                         ∨

    [start]                 [1.jpg]                 [2.jpg]       <= read-only영역

와 같이 결과가 나타난다

 

위의 결과에서 char* argv[]부분은 아래와 같은 의미를 지닌다

argv[0] = "start";

argv[1] = "1.jpg";

argv[2] = "2.jpg";를 선언한 것과 같음

 

 

 

반응형