如何解决为什么声明int* f[];没有给出错误或警告?
以下语句声明一个不带参数的函数,并返回指向整数数组的指针。
int (*f())[];
它返回一个指向大小为_____
的整数数组的指针
我们没有指定数组的大小,因此它应该给出某种警告或错误。
我之所以这样问是因为,当我们将二维数组或指向整数数组的指针传递给函数时,总是应该在形式参数中声明指针时指定尺寸。
那么,为什么允许这个声明?
是否有任何特定的理由不对这种声明抛出错误或警告?
是在定义此函数时我们也可以省略尺寸吗?还是在定义尺寸时不可避免地要指定尺寸?
为了更好的理解,请也对此功能进行虚拟定义。
解决方法
将其扔到cdecl中,您将看到:
int (*f())[];
将f声明为返回int数组的指针的函数
发生这种情况是由于array to pointer decay。
int (*f())[];
很好
int (*f())[][];
错误
int (*f())[][8];
很好
传递或返回数组时,必须给出除第一个数组以外的所有维。工作定义。
示例实现:
int (*f())[]
{
static int array[8];
static int *aptr = array;
return &aptr;
}
您可以对延迟初始化(包括延迟分配)做类似的事情,这是它自己的主题。
,“ 我们没有指定数组的大小,因此它应该给出某种警告或错误。”
我们不需要指定要指向的数组的大小。不需要知道要在调用程序中指向的数组的确切大小。 dotnet run
仅返回一个指针,而不是一个数组。
“ 我之所以这样问是因为,当我们将二维数组或指向整数数组的指针传递给函数时,总是应该在声明形参中的形式参数时指定尺寸。
em>“
不,那不是事实。如果将指向数组的指针作为函数的参数传递,则声明该参数为指向f
或10
元素的数组的指针,甚至不指向它都没关系一个数组,只声明一个指针。
50
完全有效。
int f (int *p)
{
return *p;
}
int a[7];
int b = f(a);
等于int* p
,也等于int p[]
。
传递的指针被视为单个指针。
如果在调用方中传递指向2D数组的指针(或更具体地说,指向int p[239]
数组的指针),则可以省略第一个数组,但需要指定最后一个维度。
int
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。