C語言數組名與sizeof的深層關聯

要理解 “數組名本質代表整個數組的類型和內存塊” 與 “sizeof(arr)?輸出總字節數” 的關聯,核心是抓住?sizeof?運算符的設計邏輯?和?數組類型的本質屬性—— 這兩者是直接掛鉤的,我們一步步拆解:

第一步:先明確?sizeof?的核心作用

sizeof?是 C 語言的單目運算符(不是函數!),它的唯一功能是:
計算 “操作數的類型” 所占用的內存字節數

注意:sizeof?關注的是 “類型”,而不是 “值” 或 “地址”。比如:

  • sizeof(int):計算?int?類型的字節數(通常 4 字節);
  • sizeof(double):計算?double?類型的字節數(通常 8 字節);
  • 對于變量(如?int a),sizeof(a)?本質是 “計算?a?的類型(即?int)的字節數”。

第二步:數組的 “類型” 是什么?—— 包含 “元素類型 + 元素個數” 的復合類型

C 語言中,數組不是 “模糊的一堆數據”,而是有明確的、包含長度信息的類型。比如:

  • int arr[5]?定義的數組,其類型是?“包含 5 個 int 元素的數組”(可寫作?int[5]);
  • char str[10]?定義的數組,其類型是?“包含 10 個 char 元素的數組”(可寫作?char[10])。

這個 “數組類型” 的核心屬性有兩個:

  1. 元素的基礎類型(如?intchar);
  2. 元素的個數(如 5、10)。

而 “數組類型的內存占用”,自然就是?“元素類型的字節數 × 元素個數”—— 這是數組類型本身的固有屬性,和 “數組名代表整個數組” 直接呼應。

第三步:數組名與數組類型的綁定 —— 數組名是 “數組類型的標識”

當你定義?int arr[5]?時:

  • arr?這個數組名,不是一個 “獨立的變量”,而是綁定到 “int [5] 這個數組類型” 的標識—— 它直接關聯著 “5 個 int 元素構成的內存塊” 和 “int [5] 這個類型”。

因此,當你對數組名使用?sizeof(arr)?時,sizeof?會識別出:
“操作數?arr?對應的類型是?int[5](包含 5 個 int 的數組類型)”,
然后計算這個類型的字節數:5 × sizeof(int) = 5×4=20?字節(32/64 位系統?int?均為 4 字節)。

反例:如果數組名是指針,sizeof?會是什么結果?

我們再用指針對比,強化理解:
如果?arr?是指針(比如?int *p = arr),那么?p?的類型是?“指向 int 的指針類型”(int*

對指針使用?sizeof(p)?時,sizeof?計算的是 “int*?類型” 的字節數 —— 在 32 位系統是 4 字節,64 位系統是 8 字節(與指針指向的內容無關,只和系統位數有關)。

這也再次證明:數組名不是指針 —— 因為?sizeof(arr)?計算的是 “數組類型的總字節數”,而?sizeof(指針)?計算的是 “指針類型本身的字節數”,兩者邏輯完全不同。

總結

關鍵邏輯具體表現
數組名的本質綁定 “數組類型(如 int [5])” 和 “對應內存塊” 的標識,代表整個數組
sizeof 的作用計算 “操作數對應的類型” 所占用的字節數
sizeof (arr) 的原理識別 arr 對應的類型是 “包含 N 個 T 的數組類型(T [N])”,計算 N × sizeof (T)

簡單說:sizeof(arr)?之所以輸出數組總字節數,是因為?數組名直接關聯著 “包含具體元素個數的數組類型”,而?sizeof?會忠實地計算這個類型的內存占用 —— 這正是 “數組名代表整個數組” 的直接體現。

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

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

相關文章

最近對javashop做了壓力測試:百萬級并發下完全不是問題

最近對 javashop 做了壓力測試:百萬級并發下完全不是問題 在電商行業競爭白熱化的今天,系統性能直接決定了用戶體驗和企業商業成功。本文基于《Javashop 壓測報告》,從技術架構、核心指標、業務價值三大維度深度解析其性能優勢,并…

Java大廠面試實戰:從Spring Boot到微服務架構的全鏈路技術解析

Java大廠面試實戰:從Spring Boot到微服務架構的全鏈路技術解析 面試場景:某互聯網大廠Java后端開發崗 面試官(嚴肅):謝飛機,我們今天來聊點硬核的。先說說你對Java生態的理解。 謝飛機(撓頭&…

在分布式環境下正確使用MyBatis二級緩存

在分布式環境下使用 MyBatis 二級緩存,核心挑戰是解決多節點緩存一致性問題。單機環境中,二級緩存是內存級別的本地緩存,而分布式環境下多節點獨立部署,本地緩存無法跨節點共享,易導致 “緩存孤島” 和數據不一致。本文…

血緣元數據采集開放標準:OpenLineage Integrations Apache Spark Quickstart with Jupyter

OpenLineage 是一個用于元數據和血緣采集的開放標準,專為在作業運行時動態采集數據而設計。它通過統一的命名策略定義了由作業(Job)、運行實例(Run)和數據集(Dataset) 組成的通用模型&#xff0…

人工智能之數學基礎:離散隨機變量和連續隨機變量

本文重點 隨機變量是概率論與統計學中的核心概念,用于將隨機現象的抽象結果轉化為可量化的數值。根據取值特性的不同,隨機變量可分為離散型和連續型兩大類。 在前面的課程中我們學習了隨機變量,隨機變量可以理解為一個函數,通過這個函數我們就可以將隨機試驗中的結果數值…

SQL語句(查詢)

單表查詢 常量查詢 讓我們來看一個具體的 SQL 代碼和結果示例,假設有一張名為 orders 的數據表,它存儲了訂單信息,包括訂單編號(order_id)、商品單價(unit_price)、購買數量(quantit…

Java 大視界 -- Java 大數據機器學習模型在金融市場波動預測與資產配置動態調整中的應用

Java 大視界 -- Java 大數據機器學習模型在金融市場波動預測與資產配置動態調整中的應用引言:正文:一、Java 構建的金融數據處理架構1.1 多源數據實時融合與清洗1.2 跨市場數據關聯(風險傳導分析)二、Java 驅動的市場波動預測模型…

基于muduo庫的圖床云共享存儲項目(一)

基于muduo庫的圖床云共享存儲項目(一)項目簡介整體架構項目依賴基礎組件muduo庫Channel類Poller / EpollPoller 類EventLoopAcceptor類FastDfsJSON的使用項目簡介 當前所實現的項目是一個基于muduo庫的圖床云共享存儲項目,他的主要的功能就是…

數字化轉型三階段:從信息化、數字化到數智化的戰略進化

企業的數字化轉型包括信息化、數字化、數智化三個階段,并非一個階段結束才能進入到下一個階段。01信息化→業務數據化信息化是將企業在生產經營過程中產生的業務信息進行記錄、儲存和管理,通過電子終端呈現,便于信息的傳播與溝通。信息化是對…

SpringBoot如何獲取系統Controller名稱和方法名稱

這種代碼里面的Controller和里面的方法怎么獲取代碼:/*** 獲取所有Controller名稱*/ApiDescription("獲取所有Controller名稱")PostMapping("/getControllerNames")public Result getControllerNames() {return dataDesensitizationRulesServic…

(二十二)深入了解AVFoundation-編輯:視頻變速功能-實戰在Demo中實現視頻變速

一. 引言視頻變速(Speed Ramp)是視頻編輯中最常見的特效之一:慢動作(Slow Motion):強調細節,讓觀眾捕捉到肉眼難以察覺的瞬間;快動作(Fast Motion)&#xff1…

MCP零基礎學習(7)|實戰指南:構建論文分析智能體

在之前的教程中,我們已經介紹了 MCP(Model Context Protocol)的基本概念及其核心組件。在本篇教程中,我們將通過一個實際案例,演示如何運用 MCP 構建一個能夠分析學術論文的智能體。這個智能體將具備讀取 PDF 文件、提…

Unity URP半透明物體自身交疊解決方案

前言 在 Unity 的通用渲染管線(URP)中,處理半透明物體的自身交疊是一個常見挑戰。當半透明物體(如玻璃、水或透明材質)的某些部分相互重疊時,可能會出現渲染順序問題,導致視覺瑕疵。 對惹&…

哈希算法入門:深入淺出講明白HASH哈希算法

一、先搞懂:哈希算法到底是 “啥玩意兒”?咱們先別碰復雜概念,從你每天都會遇到的事說起 —— 你會發現,“哈希思維” 其實早就藏在生活里了。(一)生活中的 “哈希例子”:給東西 “貼標簽、找位…

Vuex 和 Pinia 各自的優點

核心總結(一句話概括) Vuex:Vue 官方曾經的狀態管理標準解決方案,成熟穩定,概念清晰,但語法稍顯冗長。Pinia:Vue 官方推薦的新一代狀態管理庫,API 設計極其簡潔,完美支持…

幾種方式實現文件自動上傳到服務器共享文件夾

文章目錄一、方案核心邏輯二、詳細實現步驟(以Windows系統為例)1. 確認服務器共享文件夾的“訪問權限”(前提)2. 選擇“傳輸觸發方式”(按需求選實時/周期)(1)周期傳輸(如…

Milvus介紹及多模態檢索實踐

1、核心組件 1.1 Collection (集合) 可以用一個圖書館的比喻來理解 Collection: Collection (集合): 相當于一個圖書館,是所有數據的頂層容器。一個 Collection 可以包含多個 Partition,每個 Partition 可以包含多個 Entity。 Partition (分區…

第二十三天-LCD液晶顯示實驗

一、LCD結構體定義LCD為LCD_TypeDef類型的指針,指向0x6C000000的地址空間(bank1分區4的地址范圍)。為什么需要并上0x000007FE呢?因為雖然驅動SRAM的時序和16位8080接口時序(驅動LCD時序)很像,但…

SQL性能調優

MySQL出現性能差的原因有哪些? 可能是 SOL查詢使用了全表掃描,也可能是查詢語句過于復雜,如多表 IOIN 或嵌套子查詢。 也有可能是單表數據量過大。 通常情況下,添加索引就能解決大部分性能問題。對于一些熱點數據,還可以通過增加…

dapo:開源大規模llm強化學習系統的突破與實現

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! ? 1. dapo概述:開源llm強化學習系統的重要突破 dapo&…