-3

我很难理解在哪里可以使用指向数组的指针,例如:char (*a)[10];. 所以两个基本问题。

  1. 请给我一个简单的例子,说明如何在 C 代码中使用指向数组的指针。
  2. 为什么要使用它而不是将变量声明为指针,然后在该点之后递增/递减地址。
4

3 回答 3

0

num_row示例:如何打印行和 3 列数组的元素:

#include <stdio.h>

#define NUM_ROW(x) (sizeof (x) / sizeof *(x))

// print elements of an array of num_row rows and 3 columns
void print(int (*a)[3], size_t num_row)
{
    size_t num_col = sizeof *a / sizeof **a;

    for (int i = 0; i < num_row; i++) {
        for (int j = 0; j < num_col; j++) {
            printf("%d\n", a[i][j]);
        }
    }
}

int main(void)
{
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int b[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

    print(a, NUM_ROW(a));
    print(b, NUM_ROW(b));

    return 0;
}
于 2012-04-10T18:46:54.523 回答
0

假设您有一个返回一组字符串的数据库查询。此外,假设您知道这些字符串的长度不超过 9 个字符。只是,您不知道查询返回的集合中有多少元素。

char (*a)[10] = malloc( NumRecords * sizeof *a );
if ( a == NULL )
{
  /* Handle error appropriately */
  return EXIT_FAILURE; /* Naive */
}

for ( i = 0 ; i < NumRecords ; ++i )
{
  assert(strlen(DbRecordSet[i]) < 10);
  strcpy(a[i], DbRecordSet[i]);
}
于 2012-04-10T18:33:20.760 回答
0

每当您将具有多维数组类型的表达式传递给函数时,您都将使用指向数组的指针:

int a[10][20];
foo(a);

void foo(int (*p)[20]) // or int p[][20] 
{ ... }
于 2012-04-10T20:39:20.360 回答