그래서 x [2]에서 값을 0에서 8로 변경하려고합니다.이 방법을 사용하면 작동하지 않습니다. 어떻게해야합니까? 나는 주변을 검색해 보았으나 아무 소용이 없었다.이 값을 변경하지 않는 이유는 무엇입니까?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void changevar(int* x){
int* y;
y = &x[2];
y = 8;
}
int main(int argc, char** argv){
int* c;
c = (int*) malloc(sizeof(int));
printf("here %d\n", c[2]);
changevar(&c);
printf("here %d\n", c[2]);
free(c);
}
편집 : 나는 포인터
당신은 하나의 정수를위한 공간을 할당하지만, "버퍼"에 세 번째에 액세스 할 수 있습니다. 코드의 동작은 정의되지 않았으므로 "수정"할 필요가 없습니다. – StoryTeller
1)'c [2]'는 정의되지 않은 행동입니다. 2)'changevar (& c)'는 제약 조건 위반 (즉, 컴파일 불가능)입니다. 'changevar'는'int *'인수를 기대합니다. 당신은'int **'인자를 전달하고 있습니다. 3)'y = 8 '은 제약 위반 (즉, 비 - 편집 가능)이다. 임의의 정수를 포인터에 할당 할 수 없습니다. – AnT
@AnT 그 점을 지적 해 주셔서 감사합니다! 원래 매개 변수에 changevar (int ** x)가 있습니다. 내가 x를 어떻게 바꿀 수 있는지 아십니까? – reVolutionary