int a[NUM_ROWS][NUM_COLS], (*p)[NUM_COLS], i=5;
//pointer can point to an array of length 'Length Columns'
讓我們迭代它
for(p=&a[0]; p<&a[NUM_ROWS]; p ){
(*p)[i]=0;
}
我的(不完整)理解是 p 指向陣列'a'的第 0 個索引位置的位置,它存盤為長度為 [NUM_COLS] 的一維陣列。這如何使陣列列“i”將自身重置為 0。指標如何跳轉到下一列位置?
我知道“p i”指的是“a 4 * i 位元組的地址”,那么“a x 位元組的地址”如何在使用指向陣列的指標的列迭代中發生,
uj5u.com熱心網友回復:
p是指向整行陣列的指標,因此p 使其指向下一行。通過將[i]每一行中的條目設定為 0,您將整個i第 - 列設定為 0。
我知道“p i”指的是“a 4 * i 位元組的地址”,那么“a x 位元組的地址”如何在使用指向陣列的指標的列迭代中發生,
這不是真的。
uj5u.com熱心網友回復:
而不是 for 回圈中的這個運算式
p=&a[0];
你可以寫
p = a;
運算式中使用的陣列指示符被隱式轉換(極少數例外)為指向其第一個元素的指標。
因此,取消參考指標*p,您將獲得指標所指向的二維陣列的元素p。如果陣列a元素的型別為int[NUM_COLS].
反過來,*p運算式中使用的陣列指示符(*p)[i]也被轉換為指向其型別的第一個元素的指標int *。并且運算式(*p)[i]產生指標指向的一維陣列的第 i 個元素p。
for 回圈看起來像
for( p = a; p < a NUM_ROWS; p )
{
(*p)[i]=0;
}
即二維陣列的每一“行”的第 i 個元素設定為 0。
為了更清楚,考慮一個一維陣列。
int a[NUM_ELEMENTS};
然后指向陣列第一個元素的指標看起來像
int *p1 = a;
將整個陣列作為一個物件的指標看起來像
int ( *p2 )[NUM_ELEMENTS] = &a;
你可以寫
p1 = *p2;
因為運算式*p2產生陣列a。
至于你的說法
我知道“p i”指的是“a 4 * i 位元組的地址”,那么“a x 位元組的地址”如何在使用指向陣列的指標的列迭代中發生,
那么實際上該運算式p i是指二維陣列的第 i 個元素,其地址的偏移量等于等于 的i * sizeof( int[NUM_COLS] )值i * NUM_COLS * sizeof( int )。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519694.html
標籤:数组C循环指针指针算术
上一篇:從函式內部更改全域字串指標變數?
