我很難理解在哪裏可以使用指向數組的指針 例如:char (*a)[10];
。 所以有兩個基本問題。char數組指針的值與普通字符指針的比較
- 請給我一個簡單的例子,指出如何在C代碼中使用一個指向數組的指針。
- 爲什麼要用它作爲apposed來聲明變量作爲指針,然後在該點之後遞增/遞減地址。
我很難理解在哪裏可以使用指向數組的指針 例如:char (*a)[10];
。 所以有兩個基本問題。char數組指針的值與普通字符指針的比較
假設您有一個數據庫查詢返回一組字符串。此外,假設您知道這些字符串的長度不超過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]);
}
示例:如何打印的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;
}
缺點是'print'只能用於Nx3陣列;如果你想打印出一個Nx4數組,你必須使用不同的功能。 – 2012-04-10 20:41:21
傳遞具有多尺寸數組類型的表達式的函數的任何時間,你」重新開始使用指向數組的指針:
int a[10][20];
foo(a);
void foo(int (*p)[20]) // or int p[][20]
{ ... }
在我們的數據庫中放置這麼多的可能重複的問題,我不知道從哪裏開始。使用搜索框。 :) – karlphillip 2012-04-10 18:20:03
我認爲你在倒退。與其試圖找到一個可以用X型解決的問題,你通常從一個問題開始並找出解決方法...... – 2012-04-10 18:21:39
我想你們都錯過了這一點。 OP詢問爲什麼括號中的語法糖比單純使用指向數組的字符指針更好。 – mydogisbox 2012-04-10 20:41:51