#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을 가르키는 포인터일텐데 왜 그런걸까
}
이런식으로 수정을 하고나니 오류 없이 잘 실행되었습니다. 오히려 오류가 없으니 더더욱 문제가 뭔지 어렵네요.