2
C void 함수 및 문자열을 실험하고 있습니다. 그것은 나를 위해 처음 a A �
다음 세그먼트 오류를 인쇄C 동일한 배열을 인쇄하면 두 가지 방법으로 다른 결과가 나타납니다.
#include <stdio.h>
#include <string.h>
void print(char** test);
int main(){
char* test = "abcdef";
print(&test);
return 0;
}
void print(char** test){
for(int i=0;i<strlen(*test);i++)
printf("%c\n",*test[i]);
}
:이 프로그램을 시도했습니다. 하지만 *test[i]
을 *(*test+i)
으로 변경 한 후 예상했던대로 거의 동일하게 작동합니다.
*test[i]
과 *(*test+i)
이 아닌 경우 두 번째 예에서 코드가 작동하는 이유는 무엇입니까?
이것은 [* 연산자 우선 순위 *] (http://en.cppreference.com/w/c/language/operator_precedence) 문제입니다. 배열 인덱스 연산자'[]'는 역 참조 연산자'*'보다 우선 순위가 높습니다. 뭔가 [좋은 초보자 책] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)이 당신에게 (IMO) 말 했어야합니다. –
또한 "거의 똑같은"것은 * "* 정확히 * 같은 것"이 아닙니다. 사실, 당신이 생각하는 두 가지 표현은 "거의 똑같은 것"입니다 * 아닙니다 *. (이유에 대한 나의 이전 코멘트를보십시오). –
그래서이 문제를 해결하려면'(* test) [i]'를 할 수 있습니까? –