最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言深入講解指針與結(jié)構(gòu)體的使用

 更新時(shí)間:2022年05月30日 10:07:14   作者:^O^玩轉(zhuǎn)編程  
指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得C語(yǔ)言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過(guò)指針可以更便捷地操作數(shù)組。C數(shù)組允許定義可存儲(chǔ)相同類(lèi)型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是C編程中另一種用戶(hù)自定義的可用的數(shù)據(jù)類(lèi)型,它允許您存儲(chǔ)不同類(lèi)型的數(shù)據(jù)項(xiàng)

1 啥是指針

剛剛接觸指針的同學(xué)肯定會(huì)很懵逼,指針是啥???指南針哈哈,不和大家開(kāi)玩笑,我們進(jìn)行正題吧,指針是本質(zhì)是就是地址,但我們要注意我們口頭上常說(shuō)的指針并非指針,而是指針變量。

1.1指針與指針變量

指針:內(nèi)存中一個(gè)最小單元的編號(hào),也就是地址。

指針變量:是用來(lái)存放內(nèi)存地址的變量。

我們可以看下面的這張圖。

為了唯一標(biāo)識(shí)一塊內(nèi)存空間,在C語(yǔ)言中就用指針來(lái)標(biāo)記,就像我們的寢室的門(mén)牌號(hào)一樣,假設(shè)張三的寢室門(mén)排號(hào)是A602,A602就是地址也就是指針,為了讓張三的寢室被人,可以找到,我們我們肯定是要在系統(tǒng)是登記有怎么個(gè)寢室,下次來(lái)張三寢室也就方便,而在C語(yǔ)言中,就用指針變量來(lái)存放我們的地址(通常用&地址操作符來(lái)取出地址在存放在指針變量中)

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

從中我們可以看出,我們可以通過(guò)指針變量p解引用(*),來(lái)找到a從而更改a的值。

從上面圖中我們知道在內(nèi)存中的每一塊空間的大小都是一個(gè)字節(jié),那么對(duì)一個(gè)32平臺(tái)的機(jī)器,就有32根地址線(xiàn),地址線(xiàn)上能產(chǎn)生高電平(1)和低電平(0),這樣的話(huà)就能產(chǎn)生2的32次方個(gè)地址。

2的32次方個(gè)地址

2^32Byte == 2^32/1024KB == 2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB),4G的空閑進(jìn)行編址

對(duì)于62位平臺(tái)

便有2的62地址

2^64Byte == 2^64/1024KB == 2^64/1024/1024MB==2^64/1024/1024/1024GB ==17,179,869,184GB這樣我們可以編碼的空間就會(huì)打的多。

1.2總結(jié)

1指針本質(zhì)是地址,指針變量是用來(lái)存放地址的。

2指針在32位平臺(tái)的大小為,4個(gè)字節(jié),在62位平臺(tái)為8個(gè)字節(jié)

2 指針和指針類(lèi)型

指針的類(lèi)型,其實(shí),和變量的類(lèi)型差不多,就是變量了類(lèi)型多個(gè)*號(hào)

常見(jiàn)的指針類(lèi)型

har *pc = NULL;

int *pi = NULL;

short *ps = NULL;

long *pl = NULL;

float *pf = NULL;

double *pd = NULL;

2.1指針+-整數(shù)

指針的+-整數(shù)其實(shí)反應(yīng)的是指針跳過(guò)的字節(jié),決定了指針的步長(zhǎng)。

#include<stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int* p = arr;
	printf("%d\n", *p);
	printf("%d\n", *(p + 1));
	printf("%d\n", *(p + 2));
	return 0;
}

arr指的是首元素的地址,存放在指針變量p上,我們*p就可以找到數(shù)組的第一給元素,那么*(p+1)指的又是上面呢,其實(shí)他指的是跳過(guò)一個(gè)4個(gè)字節(jié),為什么是4個(gè)字節(jié)而不是一個(gè)字節(jié)呢,這就跟指針變量的類(lèi)型有關(guān)系了,因?yàn)閜是int*s是4個(gè)字節(jié),如果是char*我們+1又會(huì)發(fā)生什么呢?

這時(shí)我們觀(guān)察到打印了0,我們*(p+4)才早的數(shù)組的第二個(gè)元素,這是因?yàn)閿?shù)組arr中的每個(gè)元素都是4個(gè)字節(jié)的,而char*p類(lèi)型的指針加1只能跳過(guò)1個(gè)字節(jié),這時(shí)候找的首地址就不對(duì)了。

3 野指針

概念: 野指針就是指針指向的位置是不可知的(隨機(jī)的、不正確的、沒(méi)有明確限制的)

3.1 野指針的成因

1指針未初始化

2指針越界訪(fǎng)問(wèn)

3指針指向的空間釋放

這里雖然可以打印出6來(lái),但這樣的訪(fǎng)問(wèn)是非法的,因?yàn)樾螀⒃诔龊瘮?shù)就會(huì)銷(xiāo)毀。

3.2 如何避免野指針的出現(xiàn)

1. 指針初始化

2. 小心指針越界

3. 指針指向空間釋放即使置NULL

4. 避免返回局部變量的地址

5. 指針使用之前檢查有效性

其中我們可以養(yǎng)成一個(gè)習(xí)慣,當(dāng)我們不知道給指針初始化何值時(shí),我們可以初始化指針為NULL(0),在對(duì)指針賦值的時(shí)候在判斷一下,就可以一定程度上避免野指針。

4 二級(jí)指針

簡(jiǎn)單的說(shuō)就是存放一級(jí)指針的地址

圖中ppa便是二級(jí)指針變量,存的一級(jí)指針變量的地址。

5 指針數(shù)組

存放指針的數(shù)組,指針數(shù)組本質(zhì)是數(shù)組。

其中的parr變是指針數(shù)組,其中parr[10]等價(jià)于*(parr+10);

指針數(shù)組可以模擬一個(gè)二維數(shù)組

6 結(jié)構(gòu)體

結(jié)構(gòu)是一些值的集合,這些值稱(chēng)為成員變量。結(jié)構(gòu)的每個(gè)成員可以是不同類(lèi)型的變量。

6.1 結(jié)構(gòu)的聲明

struct tag

{

member-list;

}variable-list;

struct:是結(jié)構(gòu)體類(lèi)型的關(guān)鍵字

struct tag:是用戶(hù)定義的結(jié)構(gòu)體類(lèi)型

member-list:是結(jié)構(gòu)體成員

variable-list:結(jié)構(gòu)體類(lèi)型變量

其中結(jié)構(gòu)的成員可以是標(biāo)量、數(shù)組、指針,甚至是其他結(jié)構(gòu)體。

6.2 結(jié)構(gòu)體變量的定義和初始化

結(jié)構(gòu)體變量的定義就是給結(jié)構(gòu)體類(lèi)型取一個(gè)變量。

結(jié)構(gòu)體的初始化

6.3 結(jié)構(gòu)體的訪(fǎng)問(wèn)

結(jié)構(gòu)體變量成員用 .訪(fǎng)問(wèn)

結(jié)構(gòu)體變量指針->訪(fǎng)問(wèn)

6.4 結(jié)構(gòu)體傳參

傳參有二種,但對(duì)于結(jié)構(gòu)體來(lái)說(shuō)傳址調(diào)用是最好的,

函數(shù)傳參的時(shí)候,參數(shù)是需要壓棧的。 如果傳遞一個(gè)結(jié)構(gòu)體對(duì)象的時(shí)候,結(jié)構(gòu)體過(guò)大,參數(shù)壓棧的的系統(tǒng)開(kāi)銷(xiāo)比較大,所以會(huì)導(dǎo)致性能的下降。

所以:結(jié)構(gòu)體傳參的時(shí)候,要傳結(jié)構(gòu)體的地址。

到此這篇關(guān)于C語(yǔ)言深入講解指針與結(jié)構(gòu)體的使用的文章就介紹到這了,更多相關(guān)C語(yǔ)言指針與結(jié)構(gòu)體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MFC框架之OnIdle案例詳解

    MFC框架之OnIdle案例詳解

    這篇文章主要介紹了MFC框架之OnIdle案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 解析Linux下C++編譯和鏈接

    解析Linux下C++編譯和鏈接

    編譯&鏈接對(duì)C&C++程序員既熟悉又陌生,熟悉在于每份代碼都要經(jīng)歷編譯&鏈接過(guò)程,陌生在于大部分人并不會(huì)刻意關(guān)注編譯&鏈接的原理。本文通過(guò)開(kāi)發(fā)過(guò)程中碰到的四個(gè)典型問(wèn)題來(lái)探索64位linux下C++編譯&鏈接的那些事。
    2021-05-05
  • C語(yǔ)言限制鏈表最大長(zhǎng)度的方法實(shí)現(xiàn)

    C語(yǔ)言限制鏈表最大長(zhǎng)度的方法實(shí)現(xiàn)

    本文主要介紹了C語(yǔ)言中限制鏈表的長(zhǎng)度,通過(guò)在添加新元素時(shí)檢查鏈表的當(dāng)前長(zhǎng)度是否已經(jīng)達(dá)到預(yù)設(shè)的最大值來(lái)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • 基于C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)

    基于C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)

    這篇文章主要介紹了基于C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語(yǔ)言三子棋一步步實(shí)現(xiàn)詳程

    C語(yǔ)言三子棋一步步實(shí)現(xiàn)詳程

    三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對(duì)角線(xiàn)連起來(lái),相對(duì)兩邊依次擺上三個(gè)雙方棋子,只要將自己的三個(gè)棋子走成一條線(xiàn),對(duì)方就算輸了,想用c語(yǔ)言做出這個(gè)游戲,事實(shí)上也是比較簡(jiǎn)單的,下面通過(guò)c語(yǔ)言進(jìn)行對(duì)五子棋的分析
    2022-02-02
  • c++ 動(dòng)態(tài)內(nèi)存分配相關(guān)總結(jié)

    c++ 動(dòng)態(tài)內(nèi)存分配相關(guān)總結(jié)

    這篇文章主要介紹了c++ 動(dòng)態(tài)內(nèi)存分配相關(guān)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)和使用c++,感興趣的朋友可以了解下
    2021-02-02
  • 關(guān)于python調(diào)用c++動(dòng)態(tài)庫(kù)dll時(shí)的參數(shù)傳遞問(wèn)題

    關(guān)于python調(diào)用c++動(dòng)態(tài)庫(kù)dll時(shí)的參數(shù)傳遞問(wèn)題

    這篇文章主要介紹了python調(diào)用c++動(dòng)態(tài)庫(kù)dll時(shí)的參數(shù)傳遞,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • c++類(lèi)構(gòu)造函數(shù)詳解

    c++類(lèi)構(gòu)造函數(shù)詳解

    這篇文章主要介紹了c++類(lèi)構(gòu)造函數(shù)示例,需要的朋友可以參考下
    2014-05-05
  • C++設(shè)計(jì)與聲明超詳細(xì)講解

    C++設(shè)計(jì)與聲明超詳細(xì)講解

    C++軟件開(kāi)發(fā)可以理解為設(shè)計(jì)一系列的類(lèi),讓這些類(lèi)相互使用,最終實(shí)現(xiàn)我們所需要的功能。類(lèi)與類(lèi)之間的相互關(guān)系可以很復(fù)雜,也可以很簡(jiǎn)單,如何簡(jiǎn)單高效的描述類(lèi)與類(lèi)之間的關(guān)系是設(shè)計(jì)的難點(diǎn)之一。遵循本文所提供的方法,將會(huì)給你一些靈感
    2022-09-09
  • vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐

    vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐

    本文主要介紹了vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06

最新評(píng)論

凤冈县| 平原县| 黄平县| 什邡市| 桃源县| 伊宁县| 芮城县| 游戏| 喀喇沁旗| 鱼台县| 富锦市| 乐东| 宝清县| 铜陵市| 霍林郭勒市| 贡嘎县| 瑞金市| 邹平县| 福贡县| 玛多县| 平果县| 安远县| 黔南| 宜州市| 定远县| 普宁市| 平安县| 邵武市| 渭南市| 广宁县| 长岭县| 云阳县| 太谷县| 天津市| 礼泉县| 石景山区| 宜章县| 永寿县| 手机| 开原市| 宜黄县|