런타임에 생성 된 두 개의 정수 배열이 있습니다 (크기는 프로그램 입력에 따라 다름). 어떤 시점에서 배열의 내용을 다른 계산의 일부로 업데이트해야합니다.포인터를 함수 매개 변수로 전달할 수 있습니까?
처음에는 C에서 함수를 반환하는 방법을 찾지 못했기 때문에 이러한 배열을 매개 변수로 전달하는 방법에 대해 생각했습니다. 스택 포인터를 복사 할 때 매개 변수가 실제로 수정 가능하지 않기 때문에 나쁜 생각 이었지만 배열 포인터로 바꾸는 것이 좋습니다.
1 테이크 (코드는 오류를 컴파일 없음) :
// Elements is just to be able to iterate through their contents (same for both):
void do_stuff(int first[], int second[], int elements) {}
// Call to the function:
do_stuff(first, second, elements);
2 걸릴 수 있기를 포인터로 변환하는 시도
기능이 여전히 비어 있지만, 이것은 내가 가지고있는 코드입니다 장소에 배열을 수정 : 나는 배열에 대한 포인터로 생각 분명히 무엇 때문에
void do_stuff(int *first[], int *second[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
일부 정당한 컴파일 시간 오류로이 코드 리드, 포인터의 배열이었다.
3 테이크, 나는 그것이 올바른 구문 될 거라고 생각 :
error: invalid use of array with unspecified bounds
:
void do_stuff(int (*first)[], int (*second)[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
아직도이 코드는 배열의 요소 (예 : *first[0]
)에 액세스하려고 할 때 시간 오류를 컴파일 생산
내 질문에 함수의 매개 변수로 배열 포인터를 사용하는 가능성에 관한, 가능합니까? 그렇다면 어떻게 할 수 있습니까?
어쨌든, 두 번째 내용을 포함하는 계산을 수행 한 후 첫 번째 배열을 업데이트하는 더 좋은 방법을 생각하면 그에 대한 의견을 말하십시오.
함수 인수로 배열을 전달할 때 실제로 첫 번째 요소에 대한 포인터를 전달하므로 해당 포인터를 사용하여 함수에서 배열을 수정할 수 있습니다. –