내 교과서를보고 있는데 거기에있는 코드에 대해 약간 혼란 스럽습니다. 한 부분에서, 그들은 다음과 같은 방법으로 포인터 연산을 수행 :void * 대 char * 포인터 산술
void* bp;
...
bp = (void*)((char*)(bp)+16);
...
하지만 나중에, 그들은 다음을 수행을 :
void* bp;
...
bp = bp+16;
...
가 다른 두 가지해야 같은 느낌하지만이 치료된다 그것은 같은 것을 좋아합니다. 당신이 (예를 들어 정수 배열) 배열 액세스를 수행하는 경우, 예를 들어, 당신이이 경우에 다음
int* a = malloc(n*sizeof(int));
...
q = *(a+1);
...
할 것, 때문에 나는 나는 다음에 접근하지 않는,이 방법을 느낀다 정수 배열에서 다음 바이트가 아닌 4 바이트? 마찬가지로 void * a를 사용하면 * (a + 1)이 다음 4 바이트가되어야한다고 생각합니다. 아니면 그렇지 않습니까? 감사합니다.
두 번째 예제는 컴파일하지 말아야합니다. –
@OliCharlesworth : 준수 모드로 컴파일하면 컴파일되지 않습니다 (또는 최소한 경고를 트리거합니다). gcc는 기본적으로 적합하지 않으며 확장으로'void *'산술을 구현합니다. –