sizeof 数组_简单的一维数组竟然有这么多坑?
各位,今兒給大家帶來一個不錯的C語言試題,此題對你在C中的數組理解與掌握是個不錯的檢查,話不多說,請看題:
問題是會輸出什么?
我們就開門見山了,通過閱讀代碼發現本體主要考察以下四方面:數組的指針法訪問;數組名和數組名取地址的應用與區別;sizeof關于數組名和其他變量的用法;強制類型轉換。
解析之前我們有兩點需要明確:
1、在C中,幾乎所有使用數組的表達式中,數組名的值是個指針常量,也就是數組第一個元素的地址。它的類型取決于數組元素的類型:如果它們是int類型,那么數組名的類型就是“指向int的常量指針“。——《C和指針》
2、在以下兩中場合下,數組名并不是用指針常量來表示,就是當數組名作為sizeof操作符和單目操作符&的操作數時。sizeof返回整個數組的長度,而不是指向數組的指針的長度。取一個數組名的地址所產生的是一個指向數組的指針,而不是一個指向某個指針常量的指針。所以&a后返回的指針便是指向數組的指針,跟a(一個指向a[0]的指針)在指針的類型上是有區別的。——《C和指針》。
本題解析:
1、&a表示的是整個數組的地址,+1后表示移動跟這個數組大小一樣的空間,int*進行了強制類型轉換為一個int類型元素的地址,因此p指向了數組a后面的一個int類型元素。
2、*(p-1)表示p向后移動一個int類型的字節數再解引用,因此為數組a的最后一個元素5;*p-1表示先解引用p指向的地址出的值在減一,此時該值是未定義的。
3、sizeof(數組名)得到的是整個數組的字節數,即5*4=20;sizeof(數組地址)為地址多占字節數,64位下為8。
4、本題答案為5,未定義,20,8。
總結
以上是生活随笔為你收集整理的sizeof 数组_简单的一维数组竟然有这么多坑?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归实现进制转换(C++版)
- 下一篇: 快速部署ldap服务