指向char数组的指针的值vs普通的char指针

时间:2012-04-10 18:18:19

标签: c arrays pointers

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

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

3 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

void foo(int (*p)[20]) // or int p[][20] 
{ ... }
相关问题