편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.03.05

    (C언어) 함수에서 받아온 매개변수를 이용한 포인터 활용하려고 하는데 컴파일 오류가없이 바로 꺼져버려서 오류를 못잡겠습니다


    #include<stdio.h>
    
    int leaf(int *arr,int len)
    {
        int **k ;
        k = &arr;
        **(k+1)=2;// 2차 포인터를 넣고 arr의 주소를 집어넣으니까 튕김
    }
    
    int main()
    {
        int ab[] = {1,5,5,4,5,8,7,7};
    
        leaf(ab,sizeof(ab)/sizeof(int));
    
        for(int i=0; i<(sizeof(ab)/sizeof(int)); i++)
        {
            printf("%d",ab[i]); 
        }
    }
    

    제가 메인함수에서의 ab 배열을 leaf 함수에 전달하였고, leaf 함수의 *arr은 제가 함수에서 포인터로 선언을 하였기때문에 k를 2차원 포인터로 선언을하고 leaf에서 받아온 매개변수 배열 arr의 주소를 넣으니까 튕기더라고요.

    그래서 그냥 1차원 포인터로

    #include<stdio.h>
    
    int leaf(int *arr,int len)
    {
        int *k ;
        k = arr; //심지어 얘는포인터인데 arr 주소값을 넣지도 않았는데 제가 원하는값이 출력됬네요...
        *(k+1)=2;
    }
    
    int main()
    {
        int ab[] = {1,5,5,4,5,8,7,7};
    
        leaf(ab,sizeof(ab)/sizeof(int));
    
        for(int i=0; i<(sizeof(ab)/sizeof(int)); i++)
        {
            printf("%d",ab[i]);
    
        }
    
    //근데 여기서 이렇게수정하면
    //분명 int *arr 은 arr을 가르키는 포인터일텐데 왜 그런걸까   
    }
    

    이런식으로 수정을 하고나니 오류 없이 잘 실행되었습니다. 오히려 오류가 없으니 더더욱 문제가 뭔지 어렵네요.

  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.03.05

    (C언어)함수에서 받아온 매개변수를 이용한 포인터 활용하려고 하는데 컴파일 오류가없이 바로 꺼져버려서 오류를 못잡겠습니다


    include

    int leaf(int arr,int len) { int **k ; k = &arr; *(k+1)=2;// 2차 포인터를 넣고 arr의 주소를 집어넣으니까 튕김

    }

    int main() { int ab[] = {1,5,5,4,5,8,7,7};

    leaf(ab,sizeof(ab)/sizeof(int));
    
    for(int i=0; i<(sizeof(ab)/sizeof(int)); i++)
    {
        printf("%d",ab[i]);
    

    }

    }

    제가 메인함수에서의 ab 배열을 leaf 함수에 전달하였고 leaf 함수의 *arr은 제가 함수에서 포인터로 선언을 하였기때문에 k를 2차원 포인터로 선언을하고 leaf에서 받아온 매개변수 배열 arr의 주소를 넣으니까 튕기더라고요 그래서 그냥 1차원 포인터로

    include

    int leaf(int *arr,int len) { int *k ; k = arr; //심지어 얘는포인터인데 arr 주소값을 넣지도 않았는데 제가 원하는값이 출력됬네요... *(k+1)=2;

    }

    int main() { int ab[] = {1,5,5,4,5,8,7,7};

    leaf(ab,sizeof(ab)/sizeof(int));
    
    for(int i=0; i<(sizeof(ab)/sizeof(int)); i++)
    {
        printf("%d",ab[i]);
    

    }

    //근데 여기서 이렇게수정하면 분명 int *arr 은 arr을 가르키는 포인터일텐데 왜 그런걸까

    }

    이런식으로 수정을 하고나니 오류 없이 잘 실행되었습니다 오히려 오류가 없으니 더더욱 문제가 뭔지 어렵네요