国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言基礎(chǔ)之——指針(上)

這篇具有很好參考價(jià)值的文章主要介紹了C語言基礎(chǔ)之——指針(上)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:小伙伴們又見面啦!本期內(nèi)容,博主將展開講解有關(guān)C語言中指針的上半部分基礎(chǔ)知識(shí),一起學(xué)習(xí)起來叭?。?!


目錄

一.什么是指針

二.指針類型

1.指針的解引用

2.指針+-整數(shù)

三.野指針

1.野指針成因

(1)指針未初始化

?(2)指針越界訪問

2.如何規(guī)避野指針

四.總結(jié)


一.什么是指針

  1. 指針是內(nèi)存中一個(gè)最小單元的編號(hào),也就是地址。
  2. 我們平時(shí)所說到的指針,一般都是指針變量,是用來存放內(nèi)存地址的變量。

所以說指針實(shí)際上是一個(gè)地址,而存放在指針中的值都會(huì)被當(dāng)成地址處理。

這里有一個(gè)小知識(shí)點(diǎn):指針在32位平臺(tái)上占4個(gè)字節(jié),在64位平臺(tái)上則占8個(gè)字節(jié)。具體內(nèi)容相對(duì)復(fù)雜,我們這里不做講述。

還有一點(diǎn)要注意,一個(gè)指針雖然占有四個(gè)字節(jié),但是它存儲(chǔ)的地址僅僅為一個(gè)字節(jié),也就是這四個(gè)字節(jié)的頭頭。

二.指針類型

我們知道,定義一個(gè)指針變量就跟定義一個(gè)普通的變量一樣,可以有不同的類型。

那我們又知道不同類型的變量,又會(huì)占有不同的內(nèi)存大小。

那么不同類型的指針,也會(huì)占有不同的內(nèi)存大小嗎????

#include<stdio.h>
int main()
{
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(double*));
	return 0;
}

?我們知道sizeof是一個(gè)計(jì)算內(nèi)存大小的關(guān)鍵字,我們用它來測(cè)試一下,結(jié)果如下:

C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針

?令人出乎意料,不同類型的指針變量,占用的內(nèi)存大小竟然都相同,為什么呢???

事實(shí)上,我們定義不同類型的指針,只是為了用這個(gè)指針來存放這種類型的變量的地址。

例如我們定義char*類型的指針,只是為了存放char類型變量的地址。

那既然并不會(huì)影響指針的內(nèi)存大小,定義這么多類型的指針又有什么意義呢???

1.指針的解引用

什么是指針的解引用呢???

當(dāng)我們用指針變量通過地址來訪問或者修改一個(gè)變量的值,就叫解引用。

#include<stdio.h>
int main()
{
	int n = 0x11223344;
	int* p = &n;
	*p = 0;
	return 0;
}

假如我們初始化變量n的內(nèi)存大小為0x11223344,然后我們用int型的指針變量來解引用將其值改為0,我們來看它的內(nèi)存怎么變化:

C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針

?可以看出n的四個(gè)字節(jié)的內(nèi)存大小都變?yōu)榱?

#include<stdio.h>
int main()
{
	int n = 0x11223344;
	char* p = &n;
	*p = 0;
	return 0;
}

?同樣的方式,這次我們換成char型的指針變量,又會(huì)是什么結(jié)果呢???

C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針

?可以很輕易的看出,char型的指針變量,僅僅讓n的一個(gè)字節(jié)的內(nèi)存大小變?yōu)榱?

?這便是指針類型的意義:

指針類型決定了指針進(jìn)行解引用操作的時(shí)候,訪問幾個(gè)字節(jié)。

2.指針+-整數(shù)

#include<stdio.h>
int main()
{
	int n = 5;
	int* p1 = &n;
	char* p2 = &n;
	printf("p1 = %p\n", p1);
	printf("p1 + 1 = %p\n", p1 + 1);
	printf("p2 = %p\n", p2);
	printf("p2 + 1 = %p\n", p1 + 1);
	return 0;
}

看這段代碼,int型的指針變量p1和char型的指針變量p2的內(nèi)存地址是什么結(jié)果?

p1和p2兩個(gè)指針分別 + 1之后又會(huì)是什么結(jié)果呢

C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針

?能夠看出,兩個(gè)指針變量是可以同時(shí)訪問一個(gè)變量的地址的。

p1+1的后的內(nèi)存跳過了4個(gè)字節(jié),而p2+1后的內(nèi)存地址僅僅之跳過了1個(gè)字節(jié)。

這也是指針類型的意義:

指針類型決定了指針進(jìn)行+-操作的時(shí)候,跳過幾個(gè)字節(jié)。

三.野指針

所謂野指針,也就是說指針指向的位置是不可知的(隨機(jī)的,不正確的,沒有明確限制的)。

1.野指針成因

(1)指針未初始化

int *p;

*p = 10;

這樣的解引用方式直接就是錯(cuò)誤的,在VS環(huán)境下直接就會(huì)報(bào)錯(cuò):

C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針

?(2)指針越界訪問

#include<stdio.h>
int main()
{
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		*p = 1;
		p++;
	}
	return 0;
}

假如我們想用一個(gè)指針來改變數(shù)組中的每一個(gè)值,但是卻不小心超過了數(shù)組的大小,這樣就造成了越界訪問,出現(xiàn)了錯(cuò)誤。

指針指向的地址超過了數(shù)組的范圍,就變成了野指針。

C語言基礎(chǔ)之——指針(上),c語言,開發(fā)語言,指針

2.如何規(guī)避野指針

  1. 指針要初始化
  2. 小心指針越界
  3. 指針指向的空間釋放,及時(shí)置NULL
  4. 避免返回局部變量的地址
  5. 指針使用之前檢查有效性

這里要注意一點(diǎn),如果我們非要定義一個(gè)未知指向的指針,就要將其置NULL,也就是置0。

當(dāng)指針置NULL時(shí),也相當(dāng)于是存了一個(gè)空地址,不能對(duì)這個(gè)地址直接進(jìn)行操作。

想要操作此指針,就必須讓它指向其他已知的地址。

四.總結(jié)

以上就是有關(guān)C語言基礎(chǔ)——指針的上半部分的內(nèi)容啦,稍后博主將更新指針(下),一起期待一下叭!

喜歡博主文章的小伙伴們不要忘記一鍵三連哦!

我們下期再見!文章來源地址http://www.zghlxwxcb.cn/news/detail-675850.html

到了這里,關(guān)于C語言基礎(chǔ)之——指針(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言基礎(chǔ)之——指針(下)

    C語言基礎(chǔ)之——指針(下)

    前言:本篇文章將繼續(xù)講解有關(guān)指針的剩余基礎(chǔ)知識(shí)。 學(xué)無止境,一起加油叭?。?目錄 一.指針運(yùn)算 1.指針 +- 整數(shù) ?2.指針的關(guān)系運(yùn)算 ?3.指針 - 指針 二.指針與數(shù)組 三.二級(jí)指針 四.指針數(shù)組 總結(jié) 指針運(yùn)算包括以下三種: 指針 +- 整數(shù) 指針 - 指針 指針的關(guān)系運(yùn)算 我們嘗試用

    2024年02月11日
    瀏覽(26)
  • 【C語言基礎(chǔ)入門】二級(jí)指針、一維數(shù)組與指針、二維數(shù)組與指針

    【C語言基礎(chǔ)入門】二級(jí)指針、一維數(shù)組與指針、二維數(shù)組與指針

    在學(xué)習(xí)C語言的過程中,理解指針的概念是非常重要的。指針提供了一種直接訪問內(nèi)存地址的方式,使得我們可以更加靈活地管理數(shù)據(jù)和內(nèi)存。在本文中,我們將介紹C語言中的二級(jí)指針、一維數(shù)組與指針,并通過通俗易懂的語言和示例代碼來幫助讀者理解這些概念。 二級(jí)指針

    2024年02月05日
    瀏覽(29)
  • 【C語言基礎(chǔ)】:深入理解指針(三)

    【C語言基礎(chǔ)】:深入理解指針(三)

    指針系列回顧 : 【C語言基礎(chǔ)】:深入理解指針(一) 【C語言基礎(chǔ)】:深入理解指針(二) 一、冒泡排序 冒泡排序的核心思想就是:兩兩相鄰的元素進(jìn)行比較。 可以看到,這段代碼對(duì)arr數(shù)組進(jìn)行了排序,但這個(gè)代碼還有一些缺陷,那就是無論數(shù)組內(nèi)部的元素是否有序,他都會(huì)循

    2024年03月10日
    瀏覽(26)
  • C語言-基礎(chǔ)語法學(xué)習(xí)-3 二級(jí)指針

    C語言-基礎(chǔ)語法學(xué)習(xí)-3 二級(jí)指針

    當(dāng)涉及到多級(jí)指針時(shí),C語言的靈活性和強(qiáng)大的指針功能可以得到充分的發(fā)揮。二級(jí)指針是指指向指針的指針,也被稱為指向指針的引用。 使用二級(jí)指針可以實(shí)現(xiàn)以下功能: 動(dòng)態(tài)內(nèi)存分配:通過二級(jí)指針可以動(dòng)態(tài)地分配內(nèi)存塊,并將其地址傳遞給其他函數(shù)或模塊進(jìn)行操作。這

    2024年02月12日
    瀏覽(25)
  • C語言 指針聲明和定義 - C語言零基礎(chǔ)入門教程

    目錄 [一.指針簡(jiǎn)介] [1.內(nèi)存] [2.內(nèi)存地址] [3.指針聲明] [二.指針類型] [三.聲明并初始化一個(gè)指針] [1.聲明指針并直接初始化 – 推薦] [2.先聲明指針在初始化 – 不推薦] [四.查看指針地址和指針的值] [五.NULL 指針 – 空指針] [六.重點(diǎn)總結(jié)] [七.猜你喜歡] 零基礎(chǔ) C/C++ 學(xué)習(xí)路線推薦

    2024年03月22日
    瀏覽(45)
  • 【05】STM32·HAL庫開發(fā)-C語言基礎(chǔ)知識(shí) | stdint.h介紹 | 位操作 | 宏定義的使用 | 條件編譯 | extern聲明 | typdef使用 | 結(jié)構(gòu)體、指針、代碼規(guī)范介紹。

    【05】STM32·HAL庫開發(fā)-C語言基礎(chǔ)知識(shí) | stdint.h介紹 | 位操作 | 宏定義的使用 | 條件編譯 | extern聲明 | typdef使用 | 結(jié)構(gòu)體、指針、代碼規(guī)范介紹。

    ??stdint.h 是從 C99 中引進(jìn)的一個(gè)標(biāo)準(zhǔn) C 庫的文件,可以在MDK5的安裝路徑:D:MDK5.34ARMARMCCinclude中找到。 ??stdint.h 定義了很多類型別名,將有符號(hào)的char類型定義別名為int8_t等,使用此套別名有易于移植。 ??在MDK中需要配置才能支持使用S99標(biāo)準(zhǔn), 默認(rèn)是勾選的 。 ??只

    2024年02月08日
    瀏覽(18)
  • 逍遙自在學(xué)C語言 | 指針的基礎(chǔ)用法

    逍遙自在學(xué)C語言 | 指針的基礎(chǔ)用法

    在C語言中,指針是一項(xiàng)重要的概念,它允許我們直接訪問和操作內(nèi)存地址。 可以說,指針是C語言一大優(yōu)勢(shì)。用得好,你寫程序如同趙子龍百萬軍中取上將首級(jí);用得不好,則各種問題層出不窮,有種雙拳難敵四手的感覺。 本文將介紹指針的基礎(chǔ)知識(shí),包括指針的定義、初始

    2024年02月09日
    瀏覽(32)
  • 【C語言初階】帶你輕松掌握指針基礎(chǔ)知識(shí)完結(jié)篇——野指針,指針運(yùn)算,指針和數(shù)組,二級(jí)指針

    【C語言初階】帶你輕松掌握指針基礎(chǔ)知識(shí)完結(jié)篇——野指針,指針運(yùn)算,指針和數(shù)組,二級(jí)指針

    君兮_的個(gè)人主頁 勤時(shí)當(dāng)勉勵(lì) 歲月不待人 C/C++ 游戲開發(fā) Hello,這里是君兮_,今天繼續(xù)給大家更新0基礎(chǔ)入門C語言的內(nèi)容,我們這次主要更新的依然是初階指針的基礎(chǔ)知識(shí) 廢話不多說咱們直接開始吧??! 概念: 野指針就是指針指向的位置是不可知的(隨機(jī)的、不正確的、沒有

    2024年02月16日
    瀏覽(22)
  • 【C語言】指針超級(jí)無敵金剛霹靂進(jìn)階(但不難,還是基礎(chǔ))

    【C語言】指針超級(jí)無敵金剛霹靂進(jìn)階(但不難,還是基礎(chǔ))

    點(diǎn)擊這里訪問我的博客主頁~~ 對(duì)指針概念還不太清楚的點(diǎn)擊這里訪問上一篇指針初階2.0 上上篇指針初階1.0 謝謝各位大佬的支持咯 今天我們一起來學(xué)習(xí)指針進(jìn)階內(nèi)容 指針變量有 字符指針變量 , 數(shù)組指針變量 和 函數(shù)指針變量 char* 叫做字符指針 一般這么來使用: 通過指針存

    2024年03月09日
    瀏覽(32)
  • 【C語言初階】帶你輕松掌握指針基礎(chǔ)知識(shí)(1)——指針的定義,類型,大小

    【C語言初階】帶你輕松掌握指針基礎(chǔ)知識(shí)(1)——指針的定義,類型,大小

    君兮_的個(gè)人主頁 勤時(shí)當(dāng)勉勵(lì) 歲月不待人 C/C++ 游戲開發(fā) Hello,這里是君兮_,最近剛回家有點(diǎn)懶,從今天開始恢復(fù)更新并開始更新新的刷題系列,我們先繼續(xù)更新0基礎(chǔ)入門C語言的內(nèi)容,今天給大家?guī)淼氖侵羔樂矫娴膬?nèi)容,但由于是初階,一些高級(jí)的用法我們放在進(jìn)階篇再講

    2024年02月12日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包