void func(struct MyStruct (*arr)[], int size)函数,怎么传入实参
时间: 2024-03-13 11:42:46 浏览: 75
在调用 `func` 函数时,我们可以通过以下方式传入结构体数组指针类型的实参:
```c
struct MyStruct myArr[10]; // 假设我们定义了一个结构体数组
func(&myArr, 10); // 传入结构体数组指针及数组大小
```
在这里,我们定义了一个名为 `myArr` 的结构体数组,然后通过 `&myArr` 取得了该数组的指针,将其作为第一个实参传入 `func` 函数中。第二个实参 `10` 表示数组的大小。
需要注意的是,在调用 `func` 函数时,我们需要使用取地址符 `&` 来获取结构体数组的指针。这是因为 `arr` 形参的类型是指向结构体数组指针的指针,也就是说,实参的类型需要与形参的类型保持一致。
相关问题
struct MyStruct { int value; char name[20]; };在这里进行初始化呢
在这个结构体`MyStruct`中,你可以通过以下方式对其进行初始化:
```cpp
// 直接初始化
MyStruct myStruct = {42, "TestName"};
// 动态分配内存并初始化
MyStruct* dynamicStruct = new MyStruct();
dynamicStruct->value = 100;
strcpy(dynamicStruct->name, "DynamicValue");
// 使用结构体初始化列表
MyStruct initStruct = { .value = 50, .name = {"Initialized"} };
// 或者在函数内部自动构造
void func() {
MyStruct localStruct;
localStruct.value = 75;
strncpy(localStruct.name, "Local", sizeof(localStruct.name));
}
```
注意,对于`name`字段,如果你想要设置非空字符串,最好使用`strncpy`来防止超过数组长度,并记得加上终止符'\0'。如果直接赋值字符串,`strncpy`会自动添加'\0'。
C99下是否合法: void func(int var){int arr[var];}
在C99标准下,可以使用形参来定义数组的长度,因此`void func(int var){int arr[var];}`是合法的代码。
这种定义数组长度的方式也属于变长数组(Variable Length Array, VLA)。在函数调用时,实参的值会传递给形参`var`,然后编译器会根据形参`var`的值来确定数组`arr`的长度。需要注意的是,VLA只能定义在函数内部,不能定义在函数外部或作为全局变量。
需要注意的是,C11标准已经将VLA从标准中删除了,因此在C11及其之后的标准中,将不能使用VLA。
阅读全文