欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深度解析C語(yǔ)言中數(shù)據(jù)的存儲(chǔ)

 更新時(shí)間:2022年05月24日 14:24:02   作者:愛(ài)彈吉他的小奔同學(xué)  
本文詳細(xì)介紹了C語(yǔ)言中數(shù)據(jù)的存儲(chǔ),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

在VS編譯器里有release和debug兩種形式,debug包含調(diào)試信息,release不包含調(diào)試信息,并會(huì)對(duì)程序進(jìn)行優(yōu)化

int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	
	return 0;
}

運(yùn)行這個(gè)程序,結(jié)果是死循環(huán)打印hehe,為什么呢?

我們看內(nèi)存

在循環(huán)到第13次時(shí),把存儲(chǔ)變量i的地方改為0,i<=12仍成立,形成死循環(huán)

這是debug下出現(xiàn)的情況,但是如果是release的配置下,就不會(huì)出現(xiàn)上面死循環(huán)的情況,原因在下面這個(gè)圖里

在debug配置下,儲(chǔ)存i變量的地址比儲(chǔ)存arr數(shù)組的地址高,可能會(huì)越界到i的地址導(dǎo)致死循環(huán)

在release配置下,儲(chǔ)存i變量的地址比儲(chǔ)存arr數(shù)組的地址低,不會(huì)出現(xiàn)越界到i導(dǎo)致死循環(huán)

(如果你非寫(xiě)一個(gè)死循環(huán)那就真的死循環(huán)了,release優(yōu)化沒(méi)有那么萬(wàn)能)

數(shù)據(jù)類型介紹

類型 大小(單位為字節(jié))
char (字符數(shù)據(jù)類型)1
short (短整型)2
int (整形)4
long (長(zhǎng)整型)4或8
long long (更長(zhǎng)的整形)8
float (單精度浮點(diǎn)數(shù))4
double (雙精度浮點(diǎn)數(shù))8

long long是在C99增加的

long的大小和環(huán)境有關(guān),32位平臺(tái)上是4個(gè)字節(jié),64位平臺(tái)上是8個(gè)字節(jié)

這些都是C中內(nèi)置的數(shù)據(jù)類型

類型的意義:

使用這個(gè)類型開(kāi)辟內(nèi)存空間的大?。ù笮Q定了使用范圍)

看待內(nèi)存空間的視角

1就是不同類型可以開(kāi)辟不同大小的內(nèi)存空間

對(duì)于2,看下圖理解

類型的基本歸類

整型家族

char
   unsigned char
   signed char
short
   unsigned short [int]
   signed short [int]
int
   unsigned int
   signed int
long
   unsigned long [int]
   signed long [int]

在C99后又加了long long

long long
   unsigned long long [int]
   signed long long [int]

這些都是整型家族里的數(shù)據(jù)類型,都分有符號(hào)和無(wú)符號(hào)類型

為什么說(shuō)字符數(shù)據(jù)類型也是整型呢?

因?yàn)樽址谋举|(zhì)其實(shí)是ASCII 碼值,是整型,所以劃分到整型家族

一般我們都默認(rèn)不加unsigned或signed的默認(rèn)為是有符號(hào)的,但是char就有點(diǎn)特殊

char里有三個(gè)

  • char
  • signed char
  • unsigned char

signed char就是有符號(hào)的char,unsigned char就是無(wú)符號(hào)的char,但是什么都不加的char是有符號(hào)的還是無(wú)符號(hào)的標(biāo)準(zhǔn)是未定義的,取決于編譯器的實(shí)現(xiàn),跟編譯器有關(guān)

其他都不加的int,short,long等都是默認(rèn)為有符號(hào)的

那么為什么會(huì)有unsigned和signed之分呢?

因?yàn)樯钪斜緛?lái)就有很多數(shù)據(jù)是沒(méi)有負(fù)數(shù)的,比如身高,體重,長(zhǎng)度

也有很多數(shù)據(jù)是有正負(fù)之分的,比如溫度,放出或吸收熱量

所以我們需要用unsigned和signed來(lái)區(qū)分是否有正負(fù)之分

舉例子

int a = 10;

a是整型,有符號(hào)的整型,一個(gè)整型4個(gè)字節(jié),即32個(gè)bit

0000 0000 0000 0000 0000 0000 0000 1010 (原碼)

int a = -10;

1000 0000 0000 0000 0000 0000 0000 1010(原碼)

符號(hào)位上,0表示正數(shù),1表示負(fù)數(shù),而且符號(hào)位不算有效位,只表示正負(fù)

有符號(hào)的int可以存 (-231)~(231-1)大小的數(shù)字

unsigned int a = -10;

1111 1111 1111 1111 1111 1111 0110(-10的補(bǔ)碼)

無(wú)符號(hào)的int可以存0~232大小的數(shù)

因此,對(duì)于有正負(fù)的數(shù),我們就用有符號(hào)的signed

對(duì)于沒(méi)有正負(fù)之分的數(shù),我們就用無(wú)符號(hào)的unsigned

浮點(diǎn)數(shù)家族

(只要表示小數(shù)就可以使用浮點(diǎn)型)

 float
 double

float精度低,存儲(chǔ)的數(shù)值范圍較小

double精度高,存儲(chǔ)的數(shù)值范圍較大

構(gòu)造類型

數(shù)組類型

例如:

                      類型
int arr1[5];    ——>  int [5]
int arr2[8];    ——>  int [8]
char arr3[5]    ——>  char [5]

結(jié)構(gòu)體類型

struct

枚舉類型

enum

聯(lián)合類型

union

指針類型

int *pi;
char *pc;
float* pf;
void* pv;

空類型

void 表示空類型(無(wú)類型)

通常應(yīng)用于函數(shù)的返回類型、函數(shù)的參數(shù)、指針類型

舉一個(gè)例子

void test(void);
//第一個(gè)void  表示函數(shù)不會(huì)返回值
//第二個(gè)void  表示函數(shù)不需要傳任何參數(shù)

void*
//void用于指針類型,以后會(huì)詳細(xì)講解

以上就是深度解析C語(yǔ)言中數(shù)據(jù)的存儲(chǔ)的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言數(shù)據(jù)存儲(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++的cout.tellp()和cout.seekp()語(yǔ)法介紹

    C++的cout.tellp()和cout.seekp()語(yǔ)法介紹

    無(wú)論是使用 cout 輸出普通數(shù)據(jù),用 cout.put() 輸出指定字符,還是用 cout.write() 輸出指定字符串,數(shù)據(jù)都會(huì)先放到輸出流緩沖區(qū),待緩沖區(qū)刷新,數(shù)據(jù)才會(huì)輸出到指定位置,本文給大家介紹一下C++的cout.tellp()和cout.seekp()語(yǔ)法,需要的朋友可以參考下
    2023-09-09
  • C++ OpenGL實(shí)現(xiàn)三角形的繪制

    C++ OpenGL實(shí)現(xiàn)三角形的繪制

    這篇文章主要主要為大家詳細(xì)介紹了如何利用C++和OpenGL實(shí)現(xiàn)三角形的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手嘗試一下
    2022-06-06
  • 深入了解C語(yǔ)言棧的創(chuàng)建

    深入了解C語(yǔ)言棧的創(chuàng)建

    棧只允許在一端進(jìn)行插入或刪除操作的線性表。首先棧是一種線性表,但是限定這種線性表只能在某一端進(jìn)行插入和刪除操作,這篇文章主要介紹了C語(yǔ)言對(duì)棧的實(shí)現(xiàn)基本操作
    2021-07-07
  • c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    這篇文章主要介紹了c++從零實(shí)現(xiàn)reactor高并發(fā)服務(wù)器,包括環(huán)境準(zhǔn)備和基礎(chǔ)知識(shí)介紹,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • C語(yǔ)言的常量和字符串

    C語(yǔ)言的常量和字符串

    這篇文章主要為大家介紹了C語(yǔ)言常量和字符串,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • C語(yǔ)言各種操作符透徹理解下篇

    C語(yǔ)言各種操作符透徹理解下篇

    C?語(yǔ)言提供了豐富的操作符,除了上篇中的算術(shù)操作符,移位操作符,位操作符,賦值操作符外,還有單目操作符、關(guān)系操作符、邏輯操作符、條件操作符等等,讓我們通讀本篇來(lái)詳細(xì)了解吧
    2022-02-02
  • C++中的throw關(guān)鍵字詳解

    C++中的throw關(guān)鍵字詳解

    throw關(guān)鍵字是在C語(yǔ)言中用來(lái)拋出異常的關(guān)鍵字,它通常與try和catch一起使用,用于在程序中發(fā)生錯(cuò)誤時(shí)進(jìn)行異常處理,當(dāng)遇到無(wú)法處理的錯(cuò)誤情況時(shí),我們可以使用throw關(guān)鍵字主動(dòng)拋出異常,所以本文給大家詳細(xì)的介紹一下C++中的throw關(guān)鍵字,需要的朋友可以參考下
    2023-09-09
  • VSCode搭建STM32開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟

    VSCode搭建STM32開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟

    因?yàn)閂SCode免費(fèi)且好用,可以安裝各種插件,本文主要介紹了VSCode搭建STM32開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • OpenGL實(shí)現(xiàn)不規(guī)則區(qū)域填充算法

    OpenGL實(shí)現(xiàn)不規(guī)則區(qū)域填充算法

    這篇文章主要為大家詳細(xì)介紹了OpenGL實(shí)現(xiàn)不規(guī)則區(qū)域填充算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • OpenGL繪制三次Bezier曲線

    OpenGL繪制三次Bezier曲線

    這篇文章主要為大家詳細(xì)介紹了OpenGL繪制三次Bezier曲線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論