gpt4 book ai didi

c - float *a[]; 是什么意思?在c中声明?

转载 作者:行者123 更新时间:2023-11-30 20:44:04 27 4
gpt4 key购买 nike

假设 float *a[];在 main 方法 n c 中声明。我正在尝试了解指针并理解上述含义。

我猜测它声明了一个指向该数组 a[] 的第一个元素的指针。但是 a[] 没有任何元素..我真的很困惑。

感谢任何提供帮助的人。

最佳答案

声明变量时,如果没有数组大小,则代码无效。

a.c: In function ‘main’:
a.c:2:11: error: array size missing in ‘a’
float *a[];

使用数组大小​​,它创建一个指针数组。

测试:

#include <stdio.h>

int main() {
printf("float: %zu\n", sizeof(float));
printf("pointer: %zu\n", sizeof(void*));

float *a[100];
printf("float *a[100]: %zu\n", sizeof(a));

float (*b)[100];
printf("float (*b)[100]: %zu\n", sizeof(b));
printf("*b: %zu\n", sizeof(*b));

return 0;
}

输出:

float:           4
pointer: 8
float* a[100]: 800 // a is an array of 100 float pointers.
float (*b)[100]: 8 // b is a pointer to an array of 100 floats.
*b: 400
<小时/>

请注意,C 中有一种特殊情况,其中 [] 不声明数组,而是声明指针。声明函数参数时:

void f(float *a[], size_t n) {
// ...
}

[] 被视为指针声明,因此它相当于:

void f(float **a, size_t n) { // ...

由于数组在将其作为参数传递给函数时会衰减为指向其第一个元素的指针,因此该函数可以接受数组:

int main() {
int n = 100;
float *a[n];
// ... Initialize the array here ...
f(a, n);
return 0;
}

这是 C 语言的一个怪癖。

关于c - float *a[]; 是什么意思?在c中声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com