*argv[]
글쓴이: moonhyunjin / 작성시간: 일, 2003/03/30 - 10:47오후
#include <stdio.h> int main(int argc,char *argv[]){ char *mstring[]={"abc","def","ghi"}; int i; for(i=0; i<argc ; i++) { printf("argv = %s\n",*argv); argv++; } for(i=0; i<3 ; i++) { printf("mstring = %s\n",*mstring); mstring++; } return 0; }
argv++은 돼는데 두번째 for문의 mstring++; 왜 안돼나요? 똑같이 선언한건데.
Forums:
argv는 변수이고, mstring은 상수이므로 .
일단은 함수의 인수로 쓰인
char *argv[] 표현이
일반적으로 (함수인수가아닌) char *mstring[] 표현이
겉으로 같아 보일지라도
완전히 다른겁니다.
함수인수속의 char *argv[]는 본래 char **argv 인데
함수인수로 쓰일때에만 char **argv형식을 char *argv[]로 쓰는것이 가능합니다.
argv --> arrary of pointers -----> arrary of chars
--------------------- ---------------------
argv---> | argv[0] | ----- > |s|t|u|d|e|n|t|\0|
--------------------- ---------------------
--------------------- ---------------------
| argv[1] | ----- > |t|e|a|c|h|e|r|\0|
--------------------- ---------------------
--------------------- ---------------------
| argv[2] | ----- > |u|n|i|x|e|r|\0|
--------------------- ---------------------
....
argv is pointer to array of pointers to array of chars
argv는 문자열들에대한 포인터배열에 대한 포인터변수임.
따라서 argv++같은 연산이 가능함.
mstring 배열
--------------------- ---------------------
| mstring[0] | ----- > |s|t|u|d|e|n|t|\0|
--------------------- ---------------------
--------------------- ---------------------
| mstring[1] | ----- > |t|e|a|c|h|e|r|\0|
--------------------- ---------------------
--------------------- ---------------------
| mstring[2] | ----- > |u|n|i|x|e|r|\0|
--------------------- ------------------
mstring is array of pointers to array of chars
mstring은 배열자체이고, 따라서 배열명이 되고, 배열명은 포인터상수이므로
mstring++은 허용되지 않습니다.
댓글 달기