C語言——指針(一)

📝前言
這篇文章主要帶大家初步認識一下指針,供大家理解參考。
主要歸納與講解:
1,指針與指針變量
2,指針的基本使用(如何定義初始化引用

🎬個人簡介:努力學習ing
📋個人專欄:C語言入門基礎
🎀CSDN主頁 愚潤求學
🌄每日雞湯:雄鷹不為暴風折翼,狼群不因長夜畏懼

文章目錄

    • 一,指針與指針變量
      • 1,地址
      • 2,指針
      • 3,指針變量
    • 二,指針變量的基本使用
      • 1,指針變量的定義
      • 4,指針變量的大小
      • 2,指針變量的初始化
      • 3,指針變量的引用
      • 4,解引用操作符(“ * ”)

一,指針與指針變量

相信大家在學習C語言的時候常常聽到別人提起地址指針,那究竟什么是地址?什么是指針?什么又是指針變量?

1,地址

●拿學校舉例:
學校建成時就有很多宿舍,為了區分不同的宿舍,每個宿舍都有自己獨有的門牌號,當學校來了新同學時,學校就會給同學分配宿舍,而宿舍的門牌號就代表了同學居住的地址

●C語言中的地址也是這樣:
計算機的內存有很多儲存單元,為了區分這些儲存單元,計算機的操作系統就給每個儲存單元都分配了自己唯一的編號,當我們在C語言中定義變量的時候,編譯器就會給變量分配儲存空間這個儲存空間的編號就是存放變量的地址

2,指針

C語言把數據儲存的起始地址稱為指針
簡單來說:“指針”不過是C語言中對地址的一個新描述,新名字。
其實就是:儲存單元的編號 == 地址 == 指針

3,指針變量

指針變量就是一種用來存放指針的變量
就像存放數字的變量我們稱為整型變量,那么存放指針的變量,我們就成為指針變量
例如:

int a = 1;      //我們把1賦值給變量a, a是整型變量
int* ptr = &a;  //我們把a的地址賦值給ptr, ptr是指針變量

二,指針變量的基本使用

1,指針變量的定義

定義格式:

int   *p1;    //定義了指向整型的指針變量,指針變量的類型是:int*
float *p2;  //定義了指向浮點型的指針變量,指針變量的類型是:float*
char  *p3;  //定義了指向字符型的指針變量,指針變量的類型是:char*

這里的“*” 是一個標識符,其含義是:代表了變量的類型是指針類型
這的 int/float/char 指的是指針所指向的數據的類型
指針變量也有不同的類型:把指針名字去掉,就是指針變量對應的類型。

我們如何理解指針變量的類型呢?
因為不同類型的變量所占用的內存的空間大小不同,因此指針變量前面的數據類型表示:保存的地址是對應數據類型的變量的指針

從語法上看,我們只須把指針聲明語句中的指針名字名字左邊的指針聲明符*去掉,剩下的就是指針所指向的類型。

例如:
int *p1; //指p1存放的是一個存放整型數的起始地址。
float *p2; //指p2存放的是一個存放浮點數的起始地址。
char *p3; //指p3存放的是一個存放字符型數據的起始地址。
如圖:
圖解

4,指針變量的大小

我們都知道變量類型的大小與放什么內容有關
比如:
int類型放的是數字,大小是4字節。
char類型放的是字符,大小是1個字節。
那么指針變量的大小也就取決于放一個地址需要多大的空間
計算機決定的:
在32位機器上,存放一個地址要32個bit位,那么,在**32位機器上,一個地址的大小就是4個字節,指針變量的大小也就是4個字節
在64位機器上,存放一個地址要64個bit位,那么,在
64位機器**上,一個地址的大小就是8個字節,指針變量的大小也就是8個字節

2,指針變量的初始化

指針變量可以在聲明時或者在賦值語句中初始化。可以被初始化為0,NULL或者普通變量的地址。
NULL的指針不指向任何數據,也被稱為“空指針”,表示數值0。
初始化如下:

int m = 3;
int *p1 = &m; //用普通整型變量m的指針初始化
double *p2 = 0; //p2指針變量不指向任何浮點數
int *p3 = NULL; //p3指針變量不指向任何整型數

當我們不初始化指針變量時,指針變量的值是隨機的。
●注意:
1,盡可能使指針初始化,以防止指針指向一個未知的或者未被初始化的內存空間,變成野指針。
2,除了0以外,不能用其他具體的數字直接賦值給指針變量。

3,指針變量的引用

指針變量和其他變量相似,都可以進行賦值取值操作。
例如:

int m = 3;
double f = 4.5;
char ch = 'a';
//主要說明一下下面幾句代碼
int *p1 = &m;
double *p2 = &f;
char *p3 = &ch
int *p = p1

p1=&m 表示:將m的地址賦值給p1,此時p1就指向m
②p2=&f 表示:將f的地址賦值給p2,此時p2指向f。
③p3=&ch 與前兩句同理,即p3指向ch。
p=p1 表示:將變量p1中的指針賦值到p變量中,此時p也指向了m儲存單元
如圖:
過程圖解

4,解引用操作符(“ * ”)

作用是:取出指針變量所指向的內存單元中的值
下面我們在代碼中理解,如:
(1)

int a = 100;
int* pa = &a;
*pa = 0;

*pa=0的作用是:把a的值改成了0,在這里(*pa)的意思是通過pa中存放的地址,找到指向的空間 (其實就是a)
(2)

int p,m;
scanf("%d",&m);
p = &m;
printf("%d %d\n",m, *p);
printf("%x",p);

程序的輸出結果:
輸入:3
輸出:3 3 //這里打印的是 m 和(p)的值
22ff40 // 這里打印出的是 p中的指針,不同的計算機可能值不同
不難發現,m 與
p的結果是相同的,即 * 的作用就是:通過p中存放的m的地址,找到m。
————————————————————————————————

🌈我的分享也就到此結束啦🌈
要是我的分享也能對你的學習起到幫助,那簡直是太酷啦!
若有不足,還請大家多多指正,我們一起學習交流!
📢公主,王子:點贊👍→收藏?→關注🔍
感謝大家的觀看和支持!最后,?祝愿大家天天開心!!!

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

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

相關文章

計算方法 期末總結

思維導圖 緒論 算法的性質: 有窮性、確切性、有輸入輸出、可行性 算法的描述方法: 自然語言、偽代碼、流程圖、N-S流程圖 算法設計思想: 化大為小的縮減技術:二分法化難為易的校正技術:開方法化粗為精的松弛技術&a…

無需公網IP,使用內網穿透實現公網訪問本地OpenWRT管理界面

文章目錄 1.openWRT安裝cpolar2.配置遠程訪問地址3.固定公網地址 簡單幾步實現在公網環境下遠程訪問openWRT web 管理界面,使用cpolar內網穿透創建安全隧道映射openWRT web 界面面板443端口,無需公網IP,無需設置路由器。 1.openWRT安裝cpola…

SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理,防止前端丟失數值精度

SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理,防止前端丟失數值精度! 方式一:注解 使用注解 JsonFormat(shape JsonFormat.Shape.STRING),如下: import com.fasterxml.jackson.annotation.JsonFormat; …

在arm 64 環境下使用halcon算法

背景: halcon,機器視覺領域神一樣得存在,在windows上,應用得特別多, 但是arm環境下使用得很少。那如何在arm下使用halcon呢。按照官方說明,arm下只提供了運行時環境,并且需要使用價值一萬多人民…

設計高手的秘密武器:5款讓平面作品更出彩的軟件

平面設計是一種迷人而多樣化的藝術形式,它結合了顏色、形狀、排版和創造力,通過圖像和文本傳達信息。市場上有各種各樣的平面設計軟件,選擇合適的設計軟件是成為優秀設計師的重要一步。為了降低軟件成本,大多數設計師會優先使用免…

編譯原理之LL(1)語法分析實驗(附完整C/C++代碼與測試)

一、實驗內容與要求 先從鍵盤讀入要分析的文法,由程序自動構造FIRST、FOLLOW 集以及SELECT集合,判斷是否為LL (1)文法。 分析文法為G[E]: (0)E→ TE’ (1)E’→ TE’ (2&#xff…

軟件開發王者搭配:80%低代碼+20%高代碼

數字化領域從來不缺新概念,前兩年市場大談云原生、技術中臺、業務中臺等概念,企業更多聚焦在業務與IT架構的升級。而這兩年,隨著低代碼、生成式AI的盛行,大家則開始挖掘數字化應用的低成本建設模式。 在過去,開發一套系…

Linux 是否被過譽了?

Linux 是否被過譽了? 有些人眼里,電腦這種東西就應該是華麗麗的桌面,手握鼠標戳戳按鈕,鍵盤只為偶爾打打字,仿佛windows式的桌面形式才是理所應當,GUI才是理所應當,x86才是理所應當&#xff0c…

使用 NVProf 檢測 CUDA kernel 的 bank conflict

使用 NVProf 檢測 CUDA kernel 的 bank conflict NVProf 指令 使用 NVProf 可以對 bank conflict 進行檢測: nvprof --events shared_ld_bank_conflict,shared_st_bank_conflict <app> [args...]其中: --events 選項指定的 shared_ld_bank_conflict,shared_st_bank_c…

python -opencv 中值濾波 ,均值濾波,高斯濾波實戰

python -opencv 中值濾波 &#xff0c;均值濾波&#xff0c;高斯濾波實戰 cv2.blur-均值濾波 cv2.medianBlur-中值濾波 cv2.GaussianBlur-高斯濾波 直接看代碼吧&#xff0c;代碼很簡單&#xff1a; import copy import math import matplotlib.pyplot as plt import matp…

c++的更嚴格的類型轉換要求

C有更嚴格的類型轉換要求 C中對類型轉換有嚴格的要求&#xff0c;需要的類型和給的類型不 一致時可能會編譯報錯 例如&#xff1a; C語言中 #include<stdio.h> #include<stdlib.h> //全局變量 //C語言中的函數的形參的類型可以不寫&#xff0c;沒有返回值可以返回&…

聯發科正在改寫全球高端手機芯片市場格局

全球高端手機芯片市場正在重塑。 11 月 21 日&#xff0c;聯發科發布了新一代卓越 5G 生成式 AI 移動芯片天璣 8300。 這款定位于中端機檔位的芯片&#xff0c;無論在技術架構還是在實際性能表現上&#xff0c;都實現了對前代旗艦芯片的趕超&#xff0c;徹底打破了業內長期存…

相機和濾鏡應用程序Nevercenter CameraBag Photo mac軟件特點說明

Nevercenter CameraBag Photo mac是一款相機和濾鏡應用程序&#xff0c;它提供了一系列先進的濾鏡、調整工具和預設&#xff0c;可以幫助用戶快速地優化和編輯照片。 Nevercenter CameraBag Photo mac軟件特點 1. 濾鏡&#xff1a;Nevercenter CameraBag Photo提供了超過200種…

復費率電表和預付費電表有哪些區別?

隨著科技的發展和能源管理的日益嚴格&#xff0c;電表技術也在不斷更新換代。復費率電表和預付費電表作為兩種主流的智能電表&#xff0c;各自具有獨特的優勢和應用場景。接下來&#xff0c;小編來為大家詳細解析這兩種電表的區別及其應用場景。 一、復費率電表 1.定義及工作原…

計算機精度導致各種誤差,大數吃小數

如果 p ? p^* p?是p的近似, ∣ p ? ? p ∣ |p^*-p| ∣p??p∣是絕對誤差, ∣ p ? ? p ∣ / ∣ p ∣ |p^*-p|/|p| ∣p??p∣/∣p∣是相對誤差 舍入誤差,就是數據表示精度不足帶來的誤差 a0.1234564≈0.123456fl(a) b0.1234546≈0.123455fl(b) 在上面發生了舍入誤差 f…

力扣labuladong一刷day15天K個一組翻轉鏈表與回文鏈表

力扣labuladong一刷day15天K個一組翻轉鏈表與回文鏈表 一、25. K 個一組翻轉鏈表 題目鏈接&#xff1a;https://leetcode.cn/problems/reverse-nodes-in-k-group/ 思路&#xff1a;k個一組翻轉鏈表&#xff0c;每k個翻轉抽取出一個單獨的方法reverse&#xff0c;翻轉a到b&…

力扣刷題第二十九天--二叉樹

前言 問問自己&#xff0c;刷題的效果真的達到了嗎&#xff1f; 內容 一、翻轉二叉樹 226.翻轉二叉樹 給你一棵二叉樹的根節點 root &#xff0c;翻轉這棵二叉樹&#xff0c;并返回其根節點。 遞歸 func invertTree(root *TreeNode) *TreeNode {if rootnil{return root}…

Vue中的$nextTick的作用

在 Vue 中&#xff0c;當某些數據發生變化時&#xff0c;DOM 并不會立即更新。相反&#xff0c;Vue 會在下一個事件循環周期&#xff08;microtask&#xff09;中異步執行更新&#xff0c;這樣可以避免頻繁的 DOM 操作。然而&#xff0c;有時候我們需要在 DOM 更新后執行一些操…

2024-NeuDS-數據庫題目集

一.判斷題 1.在數據庫中產生數據不一致的根本原因是冗余。T 解析&#xff1a;數據冗余是數據庫中產生數據不一致的根本原因&#xff0c;因為當同一數據存儲在多個位置時&#xff0c;如果其中一個位置的數據被修改&#xff0c;其他位置的數據就不一致了。因此&#xff0c;在數據…

11.docker的網絡-docker0的理解及bridge網橋模式的介紹與實例

1.docker0的基本理解 安裝完docker服務后&#xff0c;我們首先查看一下宿主機的網絡配置 ifconfig我們可以看到&#xff0c;docker服務會默認在宿主機上創建一個虛擬網橋docker0&#xff0c;該網橋網絡的名字稱為docker0。它在內核層連通了其他物理或者虛擬網卡&#xff0c;這…