char (*p3)[5] = a; 和char (*p4)[5] = a;的区别?
生活随笔
收集整理的這篇文章主要介紹了
char (*p3)[5] = a; 和char (*p4)[5] = a;的区别?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
char (*p3)[5] = &a; 和char (*p4)[5] = a;的區別?
例1:
int main()?
{?
char a[5]={'A','B','C','D'};?
char (*p3)[5] = &a;?
char (*p4)[5] = a;?
return 0;
?}
例2:
int main()?
{?
char a[5]={'A','B','C','D'};?
char (*p3)[3] = &a;?
char (*p4)[3] = a;?
return 0;
?}
例3:
int main()
{?
char a[5]={'A','B','C','D'};?
char (*p3)[10] = &a;?
char (*p4)[10] = a; return 0;?
}
上面對p3 和p4 的使用,哪個正確呢?p3+1 的值會是什么?p4+1 的值又會是什么?
答案:
對例1來說:
(1)p3 和p4 都是數組指針,指向的是整個數組。
(2)&a 是整個數組的首地址,a是數組首元素的首地址,其值相同但意義不同。
(3)在C 語言里,賦值符號“=”號兩邊的數據類型必須是相同的,如果不同需要顯示或隱式的類型轉換。
(4)p3 這個定義的“=”號兩邊的數據類型完全一致,而p4 這個定義的“=”號兩邊的數據類型就不一致了。左邊的類型是指向整個數組的指針,右邊的數據類型是指向單個字符的指針。
(5)在Visual C++6.0 上給出警告,還好,這里雖然給出了警告,但由于&a 和a 的值一樣,而變量作為右值時編譯器只是取變量的值,所以運行并沒有什么問題。不過我仍然警告你別這么用。
(6)既然現在清楚了p3 和p4 都是指向整個數組的,那p3+1 和p4+1 的值就很好理解了。
例2,3大家在評論里討論。
例1:
int main()?
{?
char a[5]={'A','B','C','D'};?
char (*p3)[5] = &a;?
char (*p4)[5] = a;?
return 0;
?}
例2:
int main()?
{?
char a[5]={'A','B','C','D'};?
char (*p3)[3] = &a;?
char (*p4)[3] = a;?
return 0;
?}
例3:
int main()
{?
char a[5]={'A','B','C','D'};?
char (*p3)[10] = &a;?
char (*p4)[10] = a; return 0;?
}
上面對p3 和p4 的使用,哪個正確呢?p3+1 的值會是什么?p4+1 的值又會是什么?
答案:
對例1來說:
(1)p3 和p4 都是數組指針,指向的是整個數組。
(2)&a 是整個數組的首地址,a是數組首元素的首地址,其值相同但意義不同。
(3)在C 語言里,賦值符號“=”號兩邊的數據類型必須是相同的,如果不同需要顯示或隱式的類型轉換。
(4)p3 這個定義的“=”號兩邊的數據類型完全一致,而p4 這個定義的“=”號兩邊的數據類型就不一致了。左邊的類型是指向整個數組的指針,右邊的數據類型是指向單個字符的指針。
(5)在Visual C++6.0 上給出警告,還好,這里雖然給出了警告,但由于&a 和a 的值一樣,而變量作為右值時編譯器只是取變量的值,所以運行并沒有什么問題。不過我仍然警告你別這么用。
(6)既然現在清楚了p3 和p4 都是指向整個數組的,那p3+1 和p4+1 的值就很好理解了。
例2,3大家在評論里討論。
總結
以上是生活随笔為你收集整理的char (*p3)[5] = a; 和char (*p4)[5] = a;的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何区别指针数组和数组指针?
- 下一篇: 数组、结构体和共用体的长度计算?