所以我的書正在使用 ts 示例向我解釋指向陣列的指標
#include <stdio.h>
int main()
{
int s[4][2] = {
{1234,56},{1212,33},{1434,80},{1312,78}
};
int(*p)[2];
int i, j, * pint;
for (i = 0; i <= 3; i )
{
p = &s[i];
pint = (int*)p;
printf("\n");
for (j = 0; j<= 1; j )
{
printf("%d ", *(pint j));
}
}
return 0;
}
輸出為
1234 56
1212 33
1434 80
1312 78
沒問題,我得到相同的輸出。
我的問題是使用另一個指標pint有什么需要?
為什么我們不能直接使用P?
因此,當我嘗試直接使用P進行操作時,它不起作用
printf("%d ", *(p j));
我在輸出中有垃圾值,為什么會這樣?
我也試過列印p和pint它們是一樣的。
uj5u.com熱心網友回復:
雖然p和pint具有相同的價值,p 1但pint 1沒有。 p 1與 相同(char *)p sizeof *p,與pint 1相同(char *)pint sizeof *pint。由于所指向的物件的大小不同,因此演算法給出了不同的結果。
uj5u.com熱心網友回復:
指標p宣告為
int(*p)[2];
所以在這個 printf 呼叫中用指標取消參考指標運算式
printf("%d ", *(p j));
您將獲得二維陣列型別的第 j 個“行”,int[2]然后將隱式轉換為指向int *第 j 個“行”的第一個元素的型別的指標。
因此,您將輸出每行的第一個元素,而不是輸出每行的元素,這會導致未定義的行為 when iwill be greater than 2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523656.html
標籤:C指针
