2012-04-10 72 views
-3

我很難理解在哪裏可以使用指向數組的指針 例如:char (*a)[10];。 所以有兩個基本問題。char數組指針的值與普通字符指針的比較

  1. 請給我一個簡單的例子,指出如何在C代碼中使用一個指向數組的指針。
  2. 爲什麼要用它作爲apposed來聲明變量作爲指針,然後在該點之後遞增/遞減地址。
+4

在我們的數據庫中放置這麼多的可能重複的問題,我不知道從哪裏開始。使用搜索框。 :) – karlphillip 2012-04-10 18:20:03

+2

我認爲你在倒退。與其試圖找到一個可以用X型解決的問題,你通常從一個問題開始並找出解決方法...... – 2012-04-10 18:21:39

+0

我想你們都錯過了這一點。 OP詢問爲什麼括號中的語法糖比單純使用指向數組的字符指針更好。 – mydogisbox 2012-04-10 20:41:51

回答

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]); 
} 
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; 
} 
+0

缺點是'print'只能用於Nx3陣列;如果你想打印出一個Nx4數組,你必須使用不同的功能。 – 2012-04-10 20:41:21

0

傳遞具有多尺寸數組類型的表達式的函數的任何時間,你」重新開始使用指向數組的指針:

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

void foo(int (*p)[20]) // or int p[][20] 
{ ... }