2012-12-03 3 views
0

함수에 전달 된 배열을 증가시킬 수 있습니까?배열 포인터 증가

나는 [4] = {10,20,30,40}이라는 단일 차원 배열을 가지고 있는데, 나는 함수를 호출하고 배열을 세번째 요소를 가리 키도록 증가시키고 main()에서 그것을 출력하려고한다. 예를 들어

: 배열이 포인터로 전달되면 우리는이 작업을 수행 할 수있는 방법

int main() 
{ 
    int a[4] = {10,20,30,40}; 
    cout << *a; // 10 
    increment(); // function call 
    cout << *a; // 40 
} 

는, 배열에 저장된 값 만 수정이 반영 얻을. 함수에서 배열을 증가시켜야한다면 함수의 프로토 타입은 무엇입니까?

+1

배열에 대한 많은 정보가 있습니다. 너 무슨 짓을 한거야? –

+0

참조를 찾으십시오. 또는 함수에서 포인터를 반환하십시오. 마지막으로 아마 원래의 "포인터"를 풀지 않을 것입니다. –

+0

"증분 배열"이란 무엇입니까? 배열은 포인터가 아닙니다. 배열은 배열입니다. 배열에있는 요소에 대한 포인터를 얻고 _that_를 증가시킵니다. –

답변

2

대안은 다음과 같습니다

#include <iostream> 

void foo(int *&p) // <-- take pointer by reference... 
{ 
    ++p; 
    ++p; 
} 

int main(void) 
{ 
    int a[] = {1,2,3,4}; 

    int*p = a; 

    std::cout << *p << std::endl; 

    foo(p); 

    std::cout << *p << std::endl; 

} 

는 원래 배열에 액세스하는 두 번째 포인터를 사용하여 기능에 그 수정 ...

또한 대안 중 하나 std::vector<int>를 사용하는 것입니다, std::array<int, 4> 다음 함수에 반복기를 전달하면 (반복기를 반환하도록 가져옵니다.) ...

0

현재 구문이 올바르지 않습니다. 그러나 increment()에서 새 포인터를 반환하고 다른 변수에 저장할 수 있습니다. 제안에

int main() 
{ 
    int a[4] = {10,20,30,40}; 
    cout << *a; 
    int* new_a = increment(a) 
    cout << *new_a; 
} 
0

포인터에서 액세스 할 수 있습니다. 이 방법으로 ition : 당신은 잃게 정보없이 당신이 원하는 것을 할 수없는

int main() { 
    int a[4] = {10,20,30,40}; 
    cout << *a;  print ---> 10 
    cout << *(a + 3); print ---> 40 
} 

0

컴파일 시간에 프로그램의 데이터 공간에 프로그램의 포인트 포인터 A가 (또는 링크 시간에 따라 달라집니다 어떻게 생각하세요).

당신은 확인합니다

void function(int* &x) { 
    x+=2; 
} 

int main() { 
    int *a = new int(4); 
    int *b = a; 
    a[0] = 10; a[1] = 20; a[2] = 30; a[3] = 40; 
    cout << *a; 
    function(b); 
    cout << *b; 
    delete a; 
} 

GNU G ++와 같은 뭔가를 더 이상 포인터가이 메모리 블록의 머리에 참조되지 않습니다 때문에 포인터 변수 a를 이동할 수없는 경우. 하하