亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言深入講解指針與結構體的使用

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

1 啥是指針

剛剛接觸指針的同學肯定會很懵逼,指針是啥?。恐改厢樄?,不和大家開玩笑,我們進行正題吧,指針是本質是就是地址,但我們要注意我們口頭上常說的指針并非指針,而是指針變量。

1.1指針與指針變量

指針:內存中一個最小單元的編號,也就是地址。

指針變量:是用來存放內存地址的變量。

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

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

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

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

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

2的32次方個地址

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

對于62位平臺

便有2的62地址

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

1.2總結

1指針本質是地址,指針變量是用來存放地址的。

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

2 指針和指針類型

指針的類型,其實,和變量的類型差不多,就是變量了類型多個*號

常見的指針類型

har *pc = NULL;

int *pi = NULL;

short *ps = NULL;

long *pl = NULL;

float *pf = NULL;

double *pd = NULL;

2.1指針+-整數(shù)

指針的+-整數(shù)其實反應的是指針跳過的字節(jié),決定了指針的步長。

#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)指的又是上面呢,其實他指的是跳過一個4個字節(jié),為什么是4個字節(jié)而不是一個字節(jié)呢,這就跟指針變量的類型有關系了,因為p是int*s是4個字節(jié),如果是char*我們+1又會發(fā)生什么呢?

這時我們觀察到打印了0,我們*(p+4)才早的數(shù)組的第二個元素,這是因為數(shù)組arr中的每個元素都是4個字節(jié)的,而char*p類型的指針加1只能跳過1個字節(jié),這時候找的首地址就不對了。

3 野指針

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

3.1 野指針的成因

1指針未初始化

2指針越界訪問

3指針指向的空間釋放

這里雖然可以打印出6來,但這樣的訪問是非法的,因為形參在出函數(shù)就會銷毀。

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

1. 指針初始化

2. 小心指針越界

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

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

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

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

4 二級指針

簡單的說就是存放一級指針的地址

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

5 指針數(shù)組

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

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

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

6 結構體

結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量。

6.1 結構的聲明

struct tag

{

member-list;

}variable-list;

struct:是結構體類型的關鍵字

struct tag:是用戶定義的結構體類型

member-list:是結構體成員

variable-list:結構體類型變量

其中結構的成員可以是標量、數(shù)組、指針,甚至是其他結構體。

6.2 結構體變量的定義和初始化

結構體變量的定義就是給結構體類型取一個變量。

結構體的初始化

6.3 結構體的訪問

結構體變量成員用 .訪問

結構體變量指針->訪問

6.4 結構體傳參

傳參有二種,但對于結構體來說傳址調用是最好的,

函數(shù)傳參的時候,參數(shù)是需要壓棧的。 如果傳遞一個結構體對象的時候,結構體過大,參數(shù)壓棧的的系統(tǒng)開銷比較大,所以會導致性能的下降。

所以:結構體傳參的時候,要傳結構體的地址。

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

相關文章

  • c++類型轉換及RTTI運行階段類型識別

    c++類型轉換及RTTI運行階段類型識別

    這篇文章主要為大家介紹了c++類型轉換及RTTI運行階段類型識別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2023-05-05
  • matlab鳥群算法求解車間調度問題詳解及實現(xiàn)源碼

    matlab鳥群算法求解車間調度問題詳解及實現(xiàn)源碼

    這篇文章主要為大家介紹了matlab鳥群算法求解車間調度的問題分析及實現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • zlib庫壓縮和解壓字符串STL string的實例詳解

    zlib庫壓縮和解壓字符串STL string的實例詳解

    這篇文章主要介紹了zlib庫壓縮和解壓字符串STL string的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • C++中int類型按字節(jié)打印輸出的方法

    C++中int類型按字節(jié)打印輸出的方法

    這篇文章主要給大家介紹了關于C++中int類型按字節(jié)打印輸出的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • C/C++程序設計的基本概念詳解

    C/C++程序設計的基本概念詳解

    這篇文章主要介紹了C++程序設計的基本概念詳解,文中有非常詳細的C語言使用教程及相關基礎知識,對正在學習c語言的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-09-09
  • C++ 中assert()函數(shù)用法總結

    C++ 中assert()函數(shù)用法總結

    這篇文章主要介紹了C++ 中assert()函數(shù)用法總結的相關資料,需要的朋友可以參考下
    2017-07-07
  • C++11中的原子量和內存序詳解

    C++11中的原子量和內存序詳解

    這篇文章主要給大家介紹了關于C++11中原子量和內存序的相關資料,文中通過示例代碼介紹地方非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • C語言單鏈表的實現(xiàn)

    C語言單鏈表的實現(xiàn)

    單鏈表是一種鏈式存取的數(shù)據(jù)結構,用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。這篇文章主要介紹了C語言單鏈表的實現(xiàn) 的相關資料,需要的朋友可以參考下
    2016-04-04
  • C++利用兩個棧實現(xiàn)隊列的方法

    C++利用兩個棧實現(xiàn)隊列的方法

    這篇文章主要給大家介紹了關于C++利用兩個棧實現(xiàn)隊列的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • 深入學習C++中的函數(shù)概念

    深入學習C++中的函數(shù)概念

    這篇文章主要介紹了C++中的函數(shù)概念,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09

最新評論