C語言指針指針和數組筆試題(必看)

前言:

? ? ? ? 前面介紹了指針的大體內容,如果接下來能夠把這些代碼的含義搞得清清楚楚,那么你就是代碼king!

一維數組:

int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a+0));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(a[1]));
printf("%d\n",sizeof(&a));
printf("%d\n",sizeof(*&a));
printf("%d\n",sizeof(&a+1));
printf("%d\n",sizeof(&a[0]));
printf("%d\n",sizeof(&a[0]+1));

這些大家做做,答案應該都是什么?

? ? ? ? 咱們可以談論討論:

????????注:sizeof(arr)可以計算arr整個數組的大小!!

1、不必多說答案是16(一個整型數據占4個字節)

2、sizeof(a+0)這里表示的是第一個元素的地址的大小為4

3、sizeof(*a),a是一個指針,里面放的是一個地址(首元素的),解引用就相當于第一個元素,所以這里相當于計算一個元素大小為4個字節。

4、sizeof(a+1)表示首元素地址加一,也就是相當于第二個元素的地址,大小為4個字節。

5、sizeof(a[1])表示第2個元素的大小,大小是4個字節

6、sizeof(&a)表示取出a整個數組的地址,但是在a中保存的是首元素的地址,只有加減的時候才會跳過整個數組的大小,大小為4個字節。(不要被迷惑

7、sizeof(*&a)表示整個數組的地址放在指針中,也是一個整形指針大小為4個字節。

8、sizeof(&a+1)表示取出a整個數組的大小,然后向后跳過整個數組的大小,指向的是第a+4個元素的地址,大小是4個字節。

9、sizeof(&a[0])表示的是a[0]的地址,大小是4個字節。

10、sizoef(&a[0]+1)表示的是a[0]的地址,向后訪問一個整型的大小地址,大小為4個字節。

字符數組:

	char arr[] = { 'a','b','c','d','e','f' };printf("%d\n", sizeof(arr));printf("%d\n", sizeof(arr + 0));printf("%d\n", sizeof(*arr));printf("%d\n", sizeof(arr[1]));printf("%d\n", sizeof(&arr));printf("%d\n", sizeof(&arr + 1));printf("%d\n", sizeof(&arr[0] + 1));printf("%d\n", strlen(arr));printf("%d\n", strlen(arr + 0));printf("%d\n", strlen(*arr));printf("%d\n", strlen(arr[1]));printf("%d\n", strlen(&arr));printf("%d\n", strlen(&arr + 1));printf("%d\n", strlen(&arr[0] + 1));

直接開始分析!

注:strlen計算的是數組里面元素的個數!!

1、sizeof(arr)直接計算的是整個數組的大小,大小為6個字節

2、sizeof(arr+0)表示的是第1個元素的地址,地址的話是4個字節(千萬注意表示的不是第1個字符

3、sizeof(*arr)表示的是一個字符指針,里面放的是第一個字符的地址并且解引用,就是第一個字符,大小為1個字節。

4、sizeof(arr[1])表示的是第二個字符,大小為1個字節。

5、sizeof(&arr)表示的是取出整個數組的地址,大小為4個字節。

6、sizeof(&arr+1)表示的是向后跳過整個數組的大小(6個字節)后的地址,大小為4個字節。

7、sizeof(&arr[0]+1)表示的是第二個元素的地址,大小為4個字節。

8、strlen(arr)表示的是計算整個字符串數組的長度,大小為隨機值(注意里面沒有\0,strlen讀取到\0才終止

9、strlen(arr+0)表示的是從第一個字符開始往后讀取,直到遇到\0停止,大小為隨機值。

10、strlen(*arr),相當于strlen('a')。大小為隨機值。

11、strlen(arr[1]),相當于strlen('a'),大小同樣為隨價值。

12、strlen(&arr)相當于&arr是取出整個數組的地址,但是里面存的還是首元素的地址,所以還是從首元素開始往后讀,直到遇到\0停止,還是隨機值。

13、strlen(&arr+1)表示的是跳過整個數組大小的長度,開始往后讀遇到'\0'停止,還是隨機值。

14、strlen(&arr[0]+1)表示的是從第二個字符開始往后讀,遇到'\0'停止。

字符串:

????????

char arr[] = "abcdef";printf("%d\n", sizeof(arr));printf("%d\n", sizeof(arr + 0));printf("%d\n", sizeof(*arr));printf("%d\n", sizeof(arr[1]));printf("%d\n", sizeof(&arr));printf("%d\n", sizeof(&arr + 1));printf("%d\n", sizeof(&arr[0] + 1));printf("%d\n", strlen(arr));printf("%d\n", strlen(arr + 0));printf("%d\n", strlen(*arr));printf("%d\n", strlen(arr[1]));printf("%d\n", strlen(&arr));printf("%d\n", strlen(&arr + 1));printf("%d\n", strlen(&arr[0] + 1));

? ?最后再看一組:

1、sizeof(arr)?整個數組的大小,結果為7。(注意字符串中結尾自帶'\0')。

2、sizeof(arr+0)? ?首元素的地址,結果為4。

3、sizeof(*arr)首元素,大小為1。

4、sizeof(arr[1])第二個元素,大小為1。

5、sizeof(&arr)整個數組是地址,大小為4.

6、sizeof(&arr+1)跳過整個數組后的地址,大小為4

7、sizeof(&arr[0]+1)第二個元素的地址,大小為4.

8、strlen(arr),從第一個元素開始往后讀,直到遇到'\0'停止,結果為6.

9、strlen(arr+0),和上一個一樣的,大小為6。

10、strlen(*arr),相當于strlen(arr[0]),大小為隨機值。

11、strlen(arr[1]),大小為隨機值。

12、strlen(&arr),大小為6。

13、strlen(&arr+1),結果為隨機值。

14、strlen(&arr[0]+1),是從第二個元素開始訪問,直到遇到'\0'停止,結果為5。

熏帝們,到這還沒有結束,等下期繼續!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14703.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

element-ui輸入框和多行文字輸入框字體不一樣解決

element-ui的type"textarea"的字體樣式與其他樣式不同 <el-input type"textarea"></el-input> <el-input ></el-input>設置&#xff1a; .el-textarea__inner::placeholder {font-family: "Helvetica Neue", Helvetic…

linux排查思路

1.賬號安全 who 查看當前登錄用戶&#xff08;tty本地登錄pts遠程登錄&#xff09; w 查看系統信息&#xff0c;想知道某一時刻用戶的行為 uptime 查看登錄多久、多少用戶&#xff0c;負載 1.查看用戶信息文件/etc/passwd root:x:0:0:root:/root:/bin:/b…

刪除MySQL中所有表的外鍵

方法一&#xff1a; 原理 查詢schema中所有外鍵名稱然后拼接生成刪除語句 第一步&#xff1a; SELECT CONCAT(ALTER TABLE ,TABLE_SCHEMA,.,TABLE_NAME, DROP FOREIGN KEY ,CONSTRAINT_NAME, ;) FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA數據庫名…

Vue 跨域代理設置

Vue CLI允許你通過項目根目錄下的vue.config.js文件來定制devServer的配置。以下是一些常見的配置示例&#xff1a; module.exports {devServer: {// 跨域代理配置&#xff0c;解決開發環境API跨域問題proxy: {//匹配以api路徑請求的URL&#xff0c;轉發請求的服務器地址/api…

課時135:awk實踐_邏輯控制_綜合實踐

1.3.8 綜合實踐 學習目標 這一節&#xff0c;我們從 網絡實踐、文件實踐、小結 三個方面來學習 網絡實踐 簡介 所謂的網絡實踐&#xff0c;主要是借助于awk的數組功能&#xff0c;進行站點的信息統計操作。準備網絡環境 安裝軟件 yum install nignx -y重啟nginx [rootloca…

Linux修煉之路之自動化構建工具,進度條,gdb調試器

目錄 一&#xff1a;自動化構建工具make/makefile 生成內容&#xff1a; 清理內容&#xff1a; 對于多過程的&#xff1a; 對于多次make&#xff1a; 特殊符號&#xff1a; 二&#xff1a;小程序之進度條 三&#xff1a;git的簡單介紹 四&#xff1a;Linux調試器gdb 接…

fpga 提高有什么進階書推薦?

到FPGA中后期的時候就要開始接觸&#xff0c;如&#xff1a;高速接口、光纖數字信號處理等項目實踐了&#xff0c;那么我們可以讀一些書進行提升&#xff0c;大家可以收藏下。 高速接口項目《嵌入式高速串行總線技術:基于FPGA實現與應用》作者&#xff1a;張鋒 FPGA提升書籍推…

Go團隊:Go是什么

2024年的Google I/O大會[1]如期而至。 這屆大會的核心主旨毫無疑問是堅定不移的以AI為中心&#xff1a;Google先是發布了上下文長度將達到驚人的200萬token的Gemini 1.5 Pro[2]&#xff0c;然后面對OpenAI GPT-4o的挑釁&#xff0c;谷歌在大會上直接甩出大殺器Project Astra[3]…

第七節 ConfigurationClassParser 源碼分析

tips&#xff1a; ConfigurationClassParser 是 Springframework 中的重要類。 本章主要是源碼理解&#xff0c;有難度和深度&#xff0c;也枯燥乏味&#xff0c;可以根據實際情況選擇閱讀。 位置&#xff1a;org.springframework.context.annotation.ConfigurationClassPars…

[LLM-Agents]淺析Agent工具使用框架:MM-ReAct

上文LLM-Agents]詳解Agent中工具使用Workflow提到MM-ReAct框架&#xff0c;通過結合ChatGPT 與視覺專家模型來解決復雜的視覺理解任務的框架。通過設計文本提示&#xff08;prompt design&#xff09;&#xff0c;使得語言模型能夠接受、關聯和處理多模態信息&#xff0c;如圖像…

winform在一個類中調用窗體的控件和方法的兩個方式

第一: 在類中創建窗體對象的方式&#xff0c;通過對象調用控件或方法 eg: Form1 form1 new Form1(); form1.Button; //調用控件 form1.Method(); //調用方法 要注意&#xff0c;對應控件的Modifiers屬性要設置成public . 第二: 在窗體Form類下定義靜態變量(例如:form1)&…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

標題&#xff1a;用于自然駕駛行為識別的多注意力Transformer 源文鏈接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

linux創建私有docker倉庫以及推拉

創建私有倉庫&#xff1a; 1.下載 registry鏡像。 2.執行 registry 鏡像&#xff08;#為注釋內容&#xff0c;\為換行&#xff09;&#xff1a; docker run -d \# --restartalways每次都是開機自動啟動--restartalways \# --name registry 表示容器名--name registry \# 表示…

java讀取shp文件,獲取點位

Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范圍SHP導入模板.zip";String destDir &quo…

【Muduo】TcpServer類

TcpServer統領之前所有的類&#xff0c;是用戶直接使用的類。它通過ThreadPool管理所有的loopthread&#xff0c;保存所有的TcpConnection&#xff0c;保存用戶提供的各種回調函數并向TcpConnection的Channel中注冊回調。它負責監聽指定的端口&#xff0c;并接受來自客戶端的連…

ZeRO-3、模型并行、流水線并行適用情況

ZeRO-3 適用場景&#xff1a;參數量大但計算量相對均衡的情況。 主要特點&#xff1a; 參數分片&#xff1a;將模型參數、優化器狀態和梯度在多個 GPU 上進行分片。顯存優化&#xff1a;顯著減少每個 GPU 上的顯存占用&#xff0c;使得可以在較小的 GPU 上訓練更大的模型。 …

思科模擬器--06.單臂路由升級版--多端路由互連實驗--24.5.20

實驗圖紙如下: 第0步: 先放置六臺個人電腦,一臺交換機和一臺2911路由器(千兆路由器(G0開頭的)) 接著,用直通線將 PC0的F0,PC1的F0分別和交換機的F0/0, F0/1連接 交換機的F0/3和路由器的G0/0連接 PC2的F0,PC3的F0分別和交換機的F0/4, F0/5連接 交換機的F0/6和路由器的G0/1…

電腦連接愛快iKuai軟路由之后,網卡沒有正常獲取到IP,無法訪問愛快路由管理頁?

前言 上一次咱們說到在愛快控制臺上設置/辨認lan口&#xff0c;設置完成之后&#xff0c;其他的一些設置就需要在愛快iKuai軟路由的管理頁面上設置。 有些小伙伴會發現&#xff0c;當電腦連接上愛快軟路由的lan口之后&#xff0c;電腦并沒有正常獲取到ip&#xff0c;導致無法訪…

JavaScript表達式和運算符

表達式 表達式一般由常量、變量、運算符、子表達式構成。最簡單的表達式可以是一個簡單的值。常量或變量。例&#xff1a;var a10 運算符 運算符一般用符號來表示&#xff0c;也有些使用關鍵字表示。運算符由3中類型 1.一元運算符&#xff1a;一個運算符能夠結合一個操作數&…

【Arthas】阿里的線上jvm監控診斷工具的基本使用

關于對運行中的項目做java監測的需求下&#xff0c;Arthas則是一個很好的解決方案。 我們可以用來 1.監控cpu 現成、內存、堆棧 2.排查cpu飚高 造成原因 3.接口沒反應 是否死鎖 4.接口慢優化 5.代碼未按預期執行 是分支不對 還是沒提交&#xff1f; 6.線上低級錯誤 能不能不重啟…