2011-11-04 5 views
1

char* string[]은 C++에서 char** string과 동일합니까? 이 두 선언의 차이점은 무엇입니까? 메모리 액세스 속도면에서 가장 좋은 선언은 무엇입니까?C++에서 "char * string []"은 "char ** string"과 동일합니까?

감사

+4

이들은 모두 C++에서 문자열 그룹을 나타내는 끔찍한 방법입니다. 대부분의 경우, std :: vector로 훨씬 더 나아질 것입니다. Jon

+1

그의 질문은 위의 두 서명 중 하나 인 argc와 관련이 있다고 가정합니다. –

답변

10

char * s[] 포인터 배열이다. char ** s은 포인터에 대한 포인터입니다. 배열은 포인터와 같지 않으므로 두 가지가 다릅니다.

(무엇 사실 당신은 그것의 첫 번째 요소에 대한 포인터로 배열을 취급 종종 수 있다는 것입니다, 그래서 두 경우 모두 s[1][2] 말을 확인합니다.)에 실제로 유효하지 않습니다

char *s[] 것을 그 자체. 그것도 선언입니다 :

const char * s[] = { "hello", "world" }; // really `const char * s[2]` 

또는 그것을 실제로 동일한 char**에있는 경우 함수 인수의 :

void foo(char * s[]); // same as `void foo(char ** s)` 
+1

문맥에 따라 다릅니다. 매개 변수가 함수에 대한 매개 변수이면 예와 같습니다. –

+0

@ 마크 : 예, 이미 그것을 추가했습니다 :-) –

+0

@ KerrekSB 무엇에 대해 s = malloc (sizeof (char) * LEN); – obo

2

char* string[]char** string 예에 붕괴 할 수 있습니다 값 의해 매개 로 전달 또는 값 함수 로부터 돌아온

둘은 동일하지

0

그들은 서로 다른, 그러나, 값에 의해 전달되는 포인터에 대부분 붕괴의 배열 (예를 들어 함수에 대한 매개 변수). 그런 경우에 인덱스를 두드리고 하루 동안 호출하는 것이 좋습니다.