下面的程序在初始化过程中给我一个错误(*a)[5]=((*)[])&v;
。 当我不打那条线时,我仍然收到错误。指向c中的数组的指针
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;
。 当我不打那条线时,我仍然收到错误。指向c中的数组的指针
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个整数的指针,它永远不会被初始化。但是在下一行中,您尝试对其进行解引用。你应该在使用它之前初始化'a',你可能试图用v初始化它,但这不是一个5整数的数组。如果你要将v重新声明为int v [5],那么a = & v应该可以工作。
虽然可能不是最好的风格,但如果他使用'(int(*)[5])&v',它应该工作,不管v的大小'。 –
&v
是对int数组v
的引用,所以它的类型为int **
(基本上)。 int (*a)[5]
表示您正在声明一个指向5个整数的数组的指针。但是,在下一行中,当您编写时,(*a)[5]
,这意味着您正在取消引用a
以获取int指针,然后再次取消重新访问存储在[5]
处的元素。但C中的数组是零索引的,因此您只能访问[0]
至[4]
,并且未分配[5]
。
你想要a = &v
。这将使a
成为int指针v
的指针。还有其他的问题,如*a
是一个int指针,以便"%d"
不会飞,你没有给任何值a
或v
,((*)[])
仅仅是不必要的,等
赋值给变量a
应该只有a
上LHS。
我认为这是简单的比你期望
#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;
}
* A [5]为int *指针数组。 v [10]也是一个指向int的指针。
所以* a和a [0]实际上是相同的东西。 ETA:也许printf(“%d \ n”,a [0] [0]);是更好的
'a [0]'是解引用垃圾指针。 –
我不这么认为。 – bobc
你以为你在做什么?应该是什么? –
什么是错误? – tenpn
哦,痛..... –