char *string = "a";
string = "abc";
위 코드는 유효합니다.C에서 다른 문자열을 사용합니까?
char string2 [2] = "a";
string2 = "abc";
두 번째 코드는 유효하지 않습니다. 왜? string2
은 char*
이고 string
과 같지 않습니까? 같은 유형의 속성은 어떻게 다른가요?
char *string = "a";
string = "abc";
위 코드는 유효합니다.C에서 다른 문자열을 사용합니까?
char string2 [2] = "a";
string2 = "abc";
두 번째 코드는 유효하지 않습니다. 왜? string2
은 char*
이고 string
과 같지 않습니까? 같은 유형의 속성은 어떻게 다른가요?
는 char
에 대한 포인터입니다. string2
은 char
요소의 배열입니다. 그 둘은 다른 유형입니다.
두 번째 예제에서는 배열에 포인터를 할당하려고합니다 (문자열 리터럴이 포인터로 평가 됨). 이는 의미가 없으므로 불가능합니다. 당신이 포인터에 인덱스 연산자 []
를 사용할 수 있기 때문에
int numbers[2];
int num;
numbers = # // How's that supposed to work?
사람들이 혼란을 조금 얻고, 배열의 이름은 첫 번째 요소에 대한 포인터로 평가 그것은에서 정말 다를 바 없다. 그렇다고 포인터가 배열임을 의미하지 않습니다. 이것은 지적 또는 포함 된 데이터에 쉽게 액세스 할 수 있도록하는 구문 론적 설탕 일뿐입니다.
두 번째 코드가 잘못되었습니다. 왜?
배열 이름은 수정할 수없는 l 값이기 때문에.
string2
achar*
은string
과 같지 않습니까?char
string
는 포인터가있을
호 string2
는 2
char
의 배열이다.
같은 유형의 속성은 어떻게 다른가요?
는 포인터가 배열 수없는 기억하십니까. string
및 string2
은 다른 유형입니다.
두 번째 코드에서 배열에 새 문자열을 할당하려고합니다.
C 배열은 직접 할당 할 수 없습니다. 사용할 수 있습니다 strcpy
char string2 [2] = "a";
strcpy(string2, "ab");
배열은 * 포인터와 같지 않습니다 *. 절대로 없었습니다. 스택 오버플로에서 셀 수있는 것보다 더 많은 시간이 걸렸습니다 (정수 오버플로). – dmckee
[C FAQ는 답변에 대한 좋은 페이지가 있습니다.] (http://c-faq.com/aryptr/) – nes1983