나는 C에서 초보자이야와의 나는 다음과 같은 코드가 있다고 가정 해 봅시다 :s ++와 * s ++ 사이에 차이점이 있습니까?
#include <stdio.h>
void test(char *t)
{
t++;
*t = 'e';
}
void main()
{
char a[] = "anto";
printf("%c\n",a[1]);
test(a);
printf("%c\n",a[1]);
}
이 내가 어떻게 포인터 작업을 파악하고있는 샘플 코드입니다. 나에게 문을 따르면 위의 코드에서
t++;
하면 호출하는 함수 test
에서 1
char
에 의해 배열 a
의 주소를 증가합니다. 좋아, 지금까지 나는 *
이 포인터가 가리키는 객체 값을 검색하는데 사용된다는 것을 알고있다.
그러나 이상하게 나는이 t++
*t++;
에 내가 이전과 동일한 출력을 얻고 변경할 때. 나는 문자 그대로
*t++;
이 내용을 바꿔야 만한다는 사실과 혼동하고있다. 이것은
*
연산자의 정의에 따른다.
하지만 다시 주소가 t
이됩니다. 어째서? 내가 컨셉을 잘못하고있는 곳? ++
여전히 포인터가 아닌 내용에 적용 - 사전
참고 : 항상 경고를 사용하여 컴파일하십시오 (예 : 'gcc -Wall'. 그리고 * 그 경고를 읽고주의를 기울이십시오. –
널 포인터에 대해 수학을하는 IIRC는 정의되지 않은 결과를 가지지 만 널 포인터를 역 참조하는 것은 정의되지 않은 동작을합니다. 그래서 차이가 있지만 t가 null 인 경우에만 나타납니다. – harold
@PaulR : 조언 해 주셔서 감사합니다. –