【C語言進階】指針面試題詳解(2)

? ? ? ? 上一期內容,大多數的解題思路寫在代碼中,沒有寫在正文中,這就導致系統判斷文章質量不高,沒有什么數據,這一期將思路寫在正文中。

注意:運行環境是x86?

?1.題目1

?思路

? ? ? ? &a是取到了整個數組的地址,值為首元素的地址,+1的步長是整個數組,所以+1之后指針指向了下圖所示的位置,此時它的類型是Int(*)[5],是一個數組指針。

? ? ? ? 此時強轉指針的類型為int*,其實就是改變了指針移動的步長,跳過一個整型;查看輸出內容,a+1是第二個元素的地址再解引用是第二個元素2,指針ptr-1,剛剛已經說明步長已經發生改變,所以這里指針向前挪動一個元素,答案是5;

答案:2 5

?2.題目2

思路:

? ? ? ? 首先定義了一個結構體指針p,已知結構體變量是20字節。

①輸出結構體指針+1,這里步長是一個結構體,一個結構體是20字節,所以要加20,轉換成16進制就是:0x100014;

②將指針轉成整型,再加一,其實直接就是數值+1,0x100001;

③將指針轉換成整型指針,加一,就是加四個字節,0x100004

答案:0x100014;0x100001;0x100004

?3.題目3

思路:

? ? ? ? ? 第一個輸出結果是4,這是因為先取出整個數組的地址再+1,指針在4的后面,強轉成int*了,ptr[-1]等價于*(ptr - 1)?,就是元素4;

? ? ? ? 第二個輸出結果是2000000,首先將整個數組的地址強轉成整型再+1,這里的整型是直接+1,舉一個例子如下圖,如果是整型+1直接跳過一個整型,但是這里是轉換成整型+1,就跟數字加法一樣直接加一。

這里的每一個元素都是四個字節存儲,+1之后只是跳過了一個字節,記住vs是小端存儲,數字的低位在低地址,具體的內存圖如下。?int*解引用之后,得到了02 00 00 00,輸出就是20 00 000

4.題目4

答案:1

解析:易錯題,注意數組大括號的內部是小括號,這里考察逗號表達式,(0,1)這里的結果是1;(2,3)結果是3,以此類推...所以數組存放了三個元素:1,3,5;p指針指向第一行,p[0]是*(p+0)所以即求第一行第一個元素,即1;

5.題目5

分析:

? ? ? ? a是首元素地址,也就是一維數組的地址,類型是int(*)[5];p的類型是int(*)[4],這里顯然類型不匹配,但是依舊強行賦值;此時p+1會跳過4個整型;a[4][2]很容易找到,p[4][2]等價于*(*(p+4)+2)首先,p先加4,每加1跳過四個字節,解引用之后就是int*了,每次跳過一個字節,跳兩個字節,最后取地址。下圖藍色的部分就是p[4][2],紅色的部分是a[4][2]。

? ? ? ? 使用整型打印那就是小地址-大地址 = -4;如果按照指針打印就看-4如何在內存中存儲了;

-4的原碼反碼補碼如下,按照%d的格式進行打印的是原碼,按照%p格式打印的是地址,而內存中存儲的就是地址,也就是補碼,轉換成16進制輸出那就是:FFFFFFFC

答案;FFFFFFFC,-4

6.題目6

答案:10,5

分析:第一個取二維數組的地址+1,跳過整個數組,強轉int*輸出再-1,即輸出最后一個元素10;

第二個aa是首元素的地址,即第一行的地址,即一維數組的地址,+1之后就是第二行的地址,再解引用那就是第二行首元素的地址,即6的地址,再-1,最后輸出就是5;

7.題目7

分析:

內存示意圖如下,char* *pa,可以這么理解:指針*pa指向的是一個char*的元素,所以pa++的時候會跳過一個char*的,直接跳到了at的地址,所以輸出at。

答案:at

8.題目8(最難)

分析:畫出三種指針的內存圖;

①cpp自增1,指向c+2的地址,解引用拿到c+2(POINT的地址),,再解引用得到P的地址,打印得到:POINT。

②cpp自增1,從c+2到c+1,再解引用得到NEW的地址,再--得到ENTER的地址,再解引用得到E的地址,再+3得到E的地址,打印輸出ER。

③cpp[-2]等價于*(cpp-2),cpp從c+1的位置回到了c+3的位置,解引用得到c+3,即FIRST的地址,再解引用得到F的地址,最后+3得到S的地址,輸出ST。

④cpp[-1][-1]等價于*(*(cpp - 1) -1),cpp在c+1的位置-1之后在c+2的位置,解引用得到c+2,即POINT的地址,再-1得到NEW的地址,最后解引用得到N的地址,最后+1得到E的地址,輸出EW。

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

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

相關文章

一文讀懂現代卷積神經網絡—稠密連接網絡(DenseNet)

目錄 什么是 DenseNet? 稠密塊(Dense Block)詳解 一、稠密塊的核心思想 二、稠密塊的結構組成 1. 卷積單元(的結構) 2. 密集連接的具體方式 3. 關鍵參數:增長率(Growth Rate, k&#xff0…

關于僵尸進程

深入理解僵尸進程:成因、危害與解決方案 進程終止的條件 我們先了解一下進程銷毀的條件: 調用了exit函數在main函數中執行了return語句 無論采用哪種方式,都會有一個返回值,這個返回值由操作系統傳遞給該進程的父進程。操作系統不…

深入解析進程、線程與協程:現代并發編程的三大支柱

深入解析進程、線程與協程:現代并發編程的三大支柱在計算資源日益豐富的時代,理解并發執行機制已成為每位開發者的必修課。本文將帶你深入探索操作系統中的三大并發模型:進程、線程與協程,揭開它們的神秘面紗。引言:并…

奇安信下一代防火墻SecGate3600

一、實驗拓撲:二、實驗目的(1)讓內網可以訪問外網。(2)讓外網能夠訪問dmz區域的web服務器。(3)測試防火墻的防毒功能,并進行檢測。三、實驗步驟(1)防火墻配置…

基于STM32的智能抽水灌溉系統設計(藍牙版)

????大家好,這里是5132單片機畢設設計項目分享,今天給大家分享的是基于《基于STM32的智能抽水灌溉系統設計》。 目錄 1、系統功能 2.1、硬件清單 2.2、功能介紹 2.3、控制模式 2、演示視頻和實物 3、系統設計框圖 4、軟件設計流程圖 5、原理…

CISSP知識點匯總- 通信與網絡安全

CISSP知識點匯總 域1---安全與風險管理域2---資產安全域3---安全工程域4---通信與網絡安全域5---訪問控制域6---安全評估與測試域7---安全運營域8---應用安全開發一、安全網絡架構和保護網絡組件 1、OSI 7層協議模型 應用層:SMTP、HTTP、SNMP 、TELNET、 FTP、SFTP、POP3、IM…

C++怎么將可變參數傳遞給第三方可變參數接口

文章目錄🔧 1. 使用 va_list 轉發(兼容C/C的傳統方案)?? 2. 模板參數包轉發(C11 類型安全方案)🧩 3. 替代方案:參數封裝與適配**方案A:使用 std::initializer_list (同類型參數)**…

服務端實現阿里云OSS直傳

介紹 阿里云上傳 OSS 有兩種方式,一種是普通上傳,一種是客戶端直傳。 普通上傳,就是需要先將文件上傳到服務端,然后調用接口將文件上傳到阿里云。 當然這種方案經常出現不合理的使用方式,即客戶端充當服務端的角色&…

on-policy和offpolicy算法

一句話總結On-policy(同策略):邊學邊用,用當前策略生成的數據更新當前策略。例子:演員自己演完一場戲后,根據觀眾反饋改進演技。Off-policy(異策略):學用分離&#xff0c…

CA-IS3082W 隔離485 收發器芯片可能存在硬件BUG

RT,這個RS485 隔離收發器芯片基本上不可用。本來要買CA-IS3082WX,不小心在某寶買到了沒有X 的CA-IS3082W。立創上說沒有X 的版本已經停產,連對應的數據手冊都找不到,全換成WX 了。 這類半雙工485 收發器芯片電路一般都直接把DE 和…

dockerfile 筆記

# 設置JAVA版本 FROM openjdk:20-ea-17-jdk MAINTAINER aaa # 指定存儲卷, 任何向/tmp寫入的信息都不會記錄到容器存儲層 VOLUME /tmp # 拷貝運行JAR包 ARG JAR_FILE COPY app.jar /app.jar RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/…

高德開放平臺攜手阿里云,面向開發者推出地圖服務產品MCP Server

高德開放平臺攜手阿里云,面向開發者推出地圖服務產品MCP Server,通過技術能力與生態資源的深度協同,助力開發者高效構建標準化地圖服務,加速智能化場景落地。 高德開放平臺攜手阿里云,面向開發者推出MCP Server技術融合…

【論文閱讀】AdaptThink: Reasoning Models Can Learn When to Think

AdaptThink: Reasoning Models Can Learn When to Think3 Motivation3.1 理論基礎3.2 NoThinking在簡單問題中的優勢3.3 動機總結4. AdaptThink4.1 約束優化目標數學建模基本定義原始優化問題懲罰項轉換歸一化處理策略梯度實現優勢函數定義PPO風格損失函數4.2 重要性采樣策略問…

Redis高可用集群一主從復制概述

一、環境概述在分布式集群系統中為了解決服務單點故障問題,通常會把數據復制出多個副本部署到不同的機器中,滿足故障恢復和負載均衡等需求。Redis也是如此,它為我們提供了復制功能,實現了相同數據的多個Redis副本。復制功能是高可…

Java 樹形結構、層級結構數據構建

目錄前言一、樹狀結構數據庫存儲二、工具類三、測試四、自定義樹節點返回類型(只保留部分字段)1. 新增 TreeNodeDTO 類2.修改TreeUtil 類3.測試4.輸出前言 有時候,開發過程中我們會遇到一些樹狀層級結構。 比如,公司部門組織架構…

求解線性規劃模型最優解

歸納編程學習的感悟, 記錄奮斗路上的點滴, 希望能幫到一樣刻苦的你! 如有不足歡迎指正! 共同學習交流! 🌎歡迎各位→點贊 👍 收藏? 留言?📝 既然選擇了遠方,當不負青春…

達夢國產數據庫安裝

打開ISO 、文件點擊運行接受選擇安裝路徑數據初始化 新數據庫要創建數據庫實例 選擇一般用途數據庫位置 選擇所以系統用戶,設置初始密碼創建示例庫可以選可以不選查找最近添加文件登錄

互斥鎖與同步鎖

1. 鎖的本質:解決并發問題的基石在多線程/多進程環境中,臨界區(Critical Section) 是訪問共享資源的代碼段。鎖的核心目標是確保互斥訪問——任意時刻僅有一個執行單元能進入臨界區。// 典型臨界區示例 pthread_mutex_lock(&m…

高密度PCB板生產廠商深度解析

在電子制造領域,高密度PCB(印制電路板)作為核心基礎元件,其技術精度與生產穩定性直接影響終端產品性能。本文精選五家具備核心技術優勢的國內廠商,通過實地調研與行業數據驗證,為讀者呈現真實可信的供應商選…

力扣 hot100 Day44

98. 驗證二叉搜索樹 給你一個二叉樹的根節點 root ,判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下: 節點的左子樹只包含 小于 當前節點的數。 節點的右子樹只包含 大于 當前節點的數。 所有左子樹和右子樹自身必須也是二叉搜索樹 //自…