아래의 프로그램은 내게 오류 (*a)[5]=((*)[])&v;
을 제공합니다. 그 줄에 입력하지 않으면 오류가 계속 발생합니다.배열에있는 포인터
int main()
{
int v[10];
int **p;
int (*a)[5];
(*a)[5]=((*)[])&v;
printf("%d\n",*a);
printf("%d\n",sizeof(v));
return 0;
}
아래의 프로그램은 내게 오류 (*a)[5]=((*)[])&v;
을 제공합니다. 그 줄에 입력하지 않으면 오류가 계속 발생합니다.배열에있는 포인터
int main()
{
int v[10];
int **p;
int (*a)[5];
(*a)[5]=((*)[])&v;
printf("%d\n",*a);
printf("%d\n",sizeof(v));
return 0;
}
오류가 발생하면 런타임 오류가 발생했을 수 있습니다. int (* a) [5]는 초기화되지 않는 5 개의 int 배열에 대한 포인터입니다. 그러나 다음 줄에서는 역 참조를 시도합니다. 그것을 사용하기 전에 'a'를 초기화해야합니다. v로 초기화하려고 할 수 있지만 5 개의 int 배열이 아닙니다. 만약 v를 int v [5]로 재 선언한다면, a = & v가 작동해야합니다.
아마도 (int (*) [5]) & v를 사용하면 가장 좋은 스타일은 아니지만, v의 크기에 관계없이 작동해야합니다. '. –
&v
은 int 배열 v
에 대한 참조이므로 형식이 int **
(본질적)입니다. int (*a)[5]
은 5 개의 int 배열에 대한 포인터를 선언한다는 것을 의미합니다. 그러나 다음 줄에서 (*a)[5]
을 쓸 때, a
을 참조 해제하여 int 포인터를 얻은 다음 다시 dereferncing하여 [5]
에 저장된 요소에 액세스해야 함을 의미합니다. 그러나 C의 배열은 0으로 인덱싱되므로 [0]
에서 [4]
까지만 액세스 할 수 있으며 [5]
은 할당되지 않습니다.
당신은 a = &v
을 원합니다. 그러면 a
이 int 포인터 v
에 대한 포인터가됩니다. *a
그렇게 "%d"
비행하지 않습니다하는 int 포인터처럼 다른 문제가있다, 당신은 등
누구에게 -1'd에게, 왜 그런지에 대해 논평 해 주시겠습니까? 나는 틀린 것을 쓴다고 생각하지 않는다. – BlackJack
: 설명 주셔서 감사합니다. 그러나 & v는 int 배열에 대한 포인터를 제공하며 int에 대한 포인터에 대한 포인터는 제공하지 않습니다. 시도한 경우 p = & v; 컴파일러는 'int (*) [10]'에서 'int **'로 변환 할 수 없다는 오류를 발생시킵니다. – Angus
나는 -1을하지는 못했지만, 여러분의 대답은 포인터가 포인터라는 점에서 몇 가지 점을 말하는 것으로 보입니다. 'int ** '타입이 아닌'int (*) [10]'타입이고'int (*) [10]'타입의 변수로부터의 할당이 놀랍습니다. (*) [5]'는 캐스트없이 작동합니다. –
변수 a
에 할당 만에 a
가 있어야 ((*)[])
그냥 불필요, a
또는 v
에 모든 값을 부여하지 않았습니다 LHS.
나는 당신이 [5] INT * 포인터의 배열입니다 *
#include <stdio.h>
int main()
{
int v[10];
int **p;
int *a[5];
v[0] = 1234;
a[0] = v;
printf("%d\n", *a[0]);
printf("%d\n", sizeof(v));
return 0;
}
을 기대하는 것보다 간단하다고 생각합니다. v [10]은 사실 int에 대한 포인터이기도합니다.
그래서 *와 a [0]은 사실 똑같습니다.
예상 소요 시간 : 아마도 printf ("% d \ n", a [0] [0]); 더 좋다
'a [0]'은 가비지 포인터를 역 참조합니다. –
나는 그렇게 생각하지 않는다. – bobc
당신은 무엇을하고 있다고 생각하니? 무엇이 있어야 하는가? –
무엇이 오류입니까? – tenpn
아, 아프다 ..... –