C語言關於指針的註意事項

来源:http://www.cnblogs.com/cmacro/archive/2017/02/07/6373751.html
-Advertisement-
Play Games

一、指針的四個關鍵概念1、指針的類型2、指針指向的類型3、指針的值,也就是指針指向的地址4、指針自己所占用的記憶體空間註意:指針變數所存的內容就是記憶體的地址編號!例如:int **pp = NULL;1、指針的類型是 int **2、指針指向的類型 int *3、指針的值為NULL4、指針自己所站記憶體 ...


一、指針的四個關鍵概念
1、指針的類型
2、指針指向的類型
3、指針的值,也就是指針指向的地址
4、指針自己所占用的記憶體空間
註意:指針變數所存的內容就是記憶體的地址編號!

例如:
int **pp = NULL;
1、指針的類型是 int **
2、指針指向的類型 int *
3、指針的值為NULL
4、指針自己所站記憶體的大小  sizeof(pp)

二、強制類型轉換
強制類型不會改變記憶體中二進位的排列與順序,只會將二進位按照目標類型解釋。
例如:
int i = 10;
二進位位 0110;
float f = (float)i;
變數f的二進位還是 0110

三、關於CONST修飾變數
看const修飾變數的時候,完全可以將數據類型名視而不見
例如
int const *p;  //修飾*p , p可以變 , *p不能夠變
const int *p;  //修飾*p , p可以變 , *p不能夠變
const int * const p; //修飾p和*p , p不可變, *p也不可變

四、關於變數類型
1、數據類型的本質是固定記憶體空間大小的別名
2、變數的本質是一段連續記憶體空間起始地址的別名

五、關於變數聲明的意義
1、建立變數符號表
通過聲明變數,編譯器可以建立變數符號表,如此一來,程式中用到了多少變數,每個變數的類型是什麼,編譯器非常清楚,是否使用了沒有聲明的變數,編譯器在編譯期間就可以發現。從而幫助開發人員遠離由於疏忽而將變數名寫錯的情況
2、變數的數據類型指示系統為變數分配多少記憶體空間
3、變數的數據類型指示了系統如何解釋存儲空間中的值,同樣的數值,不同的類型將有不同的解釋。int占據4個位元組,float也占據4個位元組,在記憶體中同樣是存儲的二進位數,並且這個二進位數也沒有標誌區分當前是int型還是float型。如何區分?就是通過變數的數據類型來區分。由於聲明建立了變數符號表,所以系統知道變數該如何解釋
4、變數的數據類型確定了該變數的取值範圍
例如短整型數據取值-32767~32767之間
5、不同的數據類型有不同的操作
如整數可以求餘。C語言用符號”%”表示求餘。整數可以,實數不可

六、關於函數調用傳遞指針的總結
1、如果在被調函數中想修改主調函數中變數的值,則需要將主調函數中的變數的地址(指針)傳遞到被調函數中
2、如果主調函數要傳遞一個超大的數據到被調函數中時,也可以將主調函數的變數的地址(指針)傳遞到被調函數中,這樣有利於提高程式的性能
3、傳遞N級指針是為了修改N-1級指針的值,
     例如 : int *p;如果需要修改p的值,則需要將&p傳遞到函數中,才能修改p的值

七、關於指針與數組互換的問題
在表達式中,指針和數組是可以互換的,因為他們在編譯器裡面的最終形式都是指針,並且都可以進行取下標操作

八、數組與指針的區別
數組: 一個數組就是一個地址,並且該地址是一個常量值,不能改變。因此,數組名不能作為左值。
指針: 一個指針就是一個地址的地址 , 並且該地址是可以改變的。也就可以作為左值。

九、指針與地址的區別
指針就是地址,但地址並不是指針。指針有類型,地址沒有類型。

十、傳值與傳址的區別
c語言其實只有一種傳值方式,就是按值傳遞
按值、按址傳遞的區別在於,在函數中使用的方式而已。如果在函數中是要修改地址所指向記憶體的值,則可以修改實參地址指向的內容。因為在記憶體中記憶體地址是唯一的,所以不論在什麼地方,都可以通過地址來修改記憶體中的值


指針變數總結

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • DispatcherServlet DispatcherServlet 和其它web框架一樣,Spring的web框架是一個請求驅動的web框架,其設計圍繞一個中心的servlet進行,它能將請求分發給控制器,並提供其它功能幫助web應用開發。然而,Spring的DispatcherServlet所 ...
  • 1. 介紹 1)DOM(JAXP Crimson解析器) DOM是用與平臺和語言無關的方式表示XML文檔的官方W3C標準。DOM是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中尋找特定信息。分析該結構通常需要載入整個文檔和構造層次結構,然後才能做任何工作。由於它是基於信息層次的 ...
  • 1、什麼是框架 2、Spring簡介 3、IOC(配置、註解) 4、Bean(配置、註解) 5、AOP(配置、註解、AspectJ、API) 資源: http://spring.io/ http://project.spring.io/spring-framework/ Spring是什麼? 1、S ...
  • 一:運算符 1.算數運算: a除以b a除以c為整除。輸出小數點後面的數字 a//b 為地板除。只去整數,小數點後面的數字舍掉 2.比較運算 3.賦值運算 4.位運算 ps:暫時用不到 5.邏輯運算 註意:所有的數據類型都有布爾值(True/False)。為False的數據有(0,' ',None) ...
  • 原文:http://blog.csdn.net/ysughw/article/details/8992322 ContextLoaderListener監聽器的作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息。因為它實現了ServletContextListener這 ...
  • springmvc在處理器方法中通常返回的是邏輯視圖,如何定位到真正的頁面,就需要通過視圖解析器。 springmvc里提供了多個視圖解析器,InternalResourceViewResolver就是其中之一: 最常用的視圖解析器:InternalResourceViewResolver 當處理器 ...
  • xmlns是XML Namespaces的縮寫,中文名稱是XML(標準通用標記語言的子集)命名空間。 產生原因 比如: 下麵這個 XML 文檔攜帶著某個表格中的信息: table tr tdApples/td tdBananas/td /tr /table 下麵這個 XML 文檔攜帶有關桌子的信息( ...
  • 非常慚愧的說,由於之前一直使用的是windowservice,安裝apache來進行伺服器佈置的,這種方式也是最簡單最直接的方式, 但是由於php的服務大多都是linux棧的,咱們也不能落後呀,在寫了php半年之後,開始擁有的自己的第一臺centos的伺服器, 實話說,centos真的是簡潔,部署完 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...