我有上次考试中的这段代码,这是我第一次看到此代码*arr[]。这意味着什么?它是矩阵还是数组?它包含什么?
#include <stdio.h>
void f2(int **a, int x, int y);
int main()
{
int m[3][4] = {{7,12,11,21 }, {20,1,2,3}, {33,42,11,50}};
int *arr[] = { m[0], m[1], m[2] };
f2(arr, 3, 4);
_getch();
return 0;
}
void f2(int **a, int x, int y)
{
if (x > 0)
{
int i, j = 0, *p = a[x - 1];
for (i = 0; i < y; i++)
{
if (!(p[i] % 3))
printf("%d ", p[i]);
}
f2(a, x - 1, y);
}
else
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
什么
*arr[]意思
由于独立表达式*arr[]无效。
对于变量定义,这里有两种含义,具体取决于出现此类表达式的上下文:
带有初始化程序的变量定义(根据OP的代码段)
int * arr[] = { m[0], m[1], m[2] };
Run Code Online (Sandbox Code Playgroud)
这定义的阵列的指针,以int与由在其初始化剂元件的数目来确定其元素的个数。在上面的示例arr中将包含三个元素。
函数参数列表中的变量定义
如果像这样使用,则在函数声明/定义内
void foo(int * arr[]);
Run Code Online (Sandbox Code Playgroud)
它实际上定义了一个int **,一个指针到指针到int。在函数声明/定义的上下文中,int * arr[]和int ** arr是等效的,或更笼统的T*[]等于T**。
要明确说明这一点:在任何情况下int * arr[]都不要定义任何int。
| 归档时间: |
|
| 查看次数: |
5591 次 |
| 最近记录: |