char* string[]
은 C++에서 char** string
과 동일합니까? 이 두 선언의 차이점은 무엇입니까? 메모리 액세스 속도면에서 가장 좋은 선언은 무엇입니까?C++에서 "char * string []"은 "char ** string"과 동일합니까?
감사
char* string[]
은 C++에서 char** string
과 동일합니까? 이 두 선언의 차이점은 무엇입니까? 메모리 액세스 속도면에서 가장 좋은 선언은 무엇입니까?C++에서 "char * string []"은 "char ** string"과 동일합니까?
감사
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)`
문맥에 따라 다릅니다. 매개 변수가 함수에 대한 매개 변수이면 예와 같습니다. –
@ 마크 : 예, 이미 그것을 추가했습니다 :-) –
@ KerrekSB 무엇에 대해 s = malloc (sizeof (char) * LEN); – obo
char* string[]
이 char** string
예에 붕괴 할 수 있습니다 값 의해 매개 로 전달 또는 값 함수 로부터 돌아온
둘은 동일하지
그들은 서로 다른, 그러나, 값에 의해 전달되는 포인터에 대부분 붕괴의 배열 (예를 들어 함수에 대한 매개 변수). 그런 경우에 인덱스를 두드리고 하루 동안 호출하는 것이 좋습니다.
이들은 모두 C++에서 문자열 그룹을 나타내는 끔찍한 방법입니다. 대부분의 경우, std :: vector로 훨씬 더 나아질 것입니다. –
Jon
그의 질문은 위의 두 서명 중 하나 인 argc와 관련이 있다고 가정합니다. –