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

C語言超詳細(xì)講解宏與指針的使用

 更新時間:2022年06月13日 16:44:17   作者:要努力丫!  
宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的替換。要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對宏與指針的基礎(chǔ)做詳盡的介紹

1、關(guān)于define

define是一個預(yù)處理指令,有兩種用法,一種是用define定義常量;另外一種是define定義宏。

下面的例子為利用define定義常量

#define _CRT_SECURE_NO_WARNINGS
#define MAX 1000
#include <stdio.h>
int main()
{
	printf("%d\n",MAX);
	return 0;
}

運(yùn)行結(jié)果為1000.

下面的例子是define定義宏

#define ADD(X,Y) X+Y
int main()
{
	printf("%d\n",ADD(2,3));
	return 0;
}

運(yùn)行結(jié)果為5.

printf("%d\n",ADD(2,3));改為printf("%d\n",4*ADD(2,3));,則運(yùn)行結(jié)果為11.預(yù)期的運(yùn)行結(jié)果為4x5=20,為什么會出現(xiàn)這樣的結(jié)果呢?因為define定義宏是替換,就變成了4x2+3=11了,4x2為X,Y仍然是3。如何讓其得到正確的結(jié)果20呢?在寫宏的時候,將X與Y括起來,因為X與Y可能不是簡單的數(shù)字,它可能是表達(dá)式,所以定義宏的時候應(yīng)該是這樣的定義方法:#define ADD(X,Y) (X+Y),這樣一來運(yùn)行結(jié)果就是我們所預(yù)期的結(jié)果了。

2、初識指針

(1)內(nèi)存

我們買回來的電腦內(nèi)存可能是4g、8g、16g,這么大的內(nèi)存空間我們該如何去使用它呢?內(nèi)存屬于空間,內(nèi)存的使用相當(dāng)于空間的使用,與現(xiàn)實(shí)生活中空間的使用很相似?,F(xiàn)實(shí)生活中是怎么找到空間的呢?是通過地址,而地址又跟房間所關(guān)聯(lián)。比如:北京市海淀區(qū)某街道100號。

內(nèi)存是電腦上特別重要的存儲器,計算機(jī)中所有的程序的運(yùn)行都是在內(nèi)存中進(jìn)行的,所以為了有效地使用內(nèi)存,就把內(nèi)存劃分成一個一個小的內(nèi)存單元,每個內(nèi)存單元的大小是1個字節(jié),為了能夠有效地訪問到內(nèi)存的每個單元,就給內(nèi)存單元進(jìn)行了編號,這些編號被稱為內(nèi)存單元的地址。

如下圖所示:

問題來了,內(nèi)存是怎么編號的呢?一個這樣的內(nèi)存單元是多大空間?

對于機(jī)器來說,有32位機(jī)器,也有64位機(jī)器;32位機(jī)器指的是有32根地址線,地址線就是物理線,物理線是可以通電的,通電的時候電信號轉(zhuǎn)換成數(shù)字信息:正電是1,負(fù)電是0,就變成1和0組成的二進(jìn)制序列。

對于32位機(jī)器有32位地址線,那么32位地址線組成的信號排列有很多很多種,多達(dá)2的32次方個,這些序列都可以作為內(nèi)存的編號(從0開始到2^32-1),我們把這些編號稱為內(nèi)存單元的地址

00000000 00000000 00000000 00000000

01111111 11111111 11111111 11111111

10000000 00000000 00000000 00000000

11111111 1111111 111111111 111111111

一個這樣的內(nèi)存單元是多大的空間呢?

假設(shè)一個內(nèi)存單元是1bit

232=4294 967 296bit

232 /8 =536870912 byte

232 /8/1024 =524288kb

232 /8/1024/1024=512MB

232 /8/1024/1024/1024=0.5GB

實(shí)際上在32位機(jī)器的時候,2GB的內(nèi)存已經(jīng)很常見了。C語言中最小的單位是char類型,char類型是1byte=8bit-8個地址,有點(diǎn)浪費(fèi)地址了。最終平衡一下,一個內(nèi)存單元是一個字節(jié)的空間,然后進(jìn)一步地分配地址的。

(2)示例

int main()
{
	int a = 10;//a在內(nèi)存中是要分配空間的,給a分配4個字節(jié),那么給a分配的4個字節(jié)是哪4個字節(jié)呢?
	printf("% p\n", &a);//%p專門用來打印地址的
	int* pa = &a;//pa是用來存放地址的,在c語言中pa是叫指針變量(取a的地址,將a的地址放到pa里面去)
	//*說明pa是指針變量,int說明pa執(zhí)行的對象是int類型的
	return 0;
}

運(yùn)行結(jié)果為:00000054E6EFFBE4,&a拿到的是四個字節(jié)中的第一個字節(jié)的地址。

再舉個例子:

int main()
{
	char ch = 'w';
	char * pc = &ch;
	printf("%p\n",pc);
	return 0;
}

運(yùn)行結(jié)果為:

000000ACD04FF934

(3)指針的使用示例

地址如何存儲?需要定義指針變量

int main()
{
	int  num = 10;
	int * p;//p為一個整型指針變量
	p = &num;
	printf("%p\n",p);
	return 0;
}

00000030714FFB74

指針的使用示例:

#include <stdio.h>
int main()
{
	int a = 10;
	int* pa = &a;
	//*pa就是通過pa里面的地址找到a,這里的*叫解引用操作符,是單目操作符
	* pa = 20;
	printf("% d\n" , a);
	return 0;
}
//修改a的值可以不直接改a,可以通過地址來間接地改a。

運(yùn)行結(jié)果為20.修改a的值可以不直接改a,可以通過地址來間接改a。

(4)指針變量的大小

int main()
{
	printf("%d\n",sizeof(char *));
	printf("%d\n", sizeof(short *));
	printf("%d\n", sizeof(int *));
	printf("%d\n", sizeof(double *));
	return 0;
}

運(yùn)行結(jié)果均為8(其它幾種類型的指針大小也是8):

8

8

8

8

結(jié)論:指針的大小是相同的,指針是用來存放地址的,指針需要多大空間,取決于地址的存儲需要多大空間。指針在32位平臺是4個字節(jié),在64位平臺是8個字節(jié)。

32位機(jī)器上其實(shí)是32個比特位組成的二進(jìn)制序列,32bit=4byte

64位機(jī)器上其實(shí)是64個比特位組成的二進(jìn)制序列,64bit=8byte

到此這篇關(guān)于C語言超詳細(xì)講解宏與指針的使用的文章就介紹到這了,更多相關(guān)C語言宏與指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 中的Lambda表達(dá)式寫法

    C++ 中的Lambda表達(dá)式寫法

    在 C++ 11 中,lambda 表達(dá)式(通常稱為 “l(fā)ambda”)是一種在被調(diào)用的位置或作為參數(shù)傳遞給函數(shù)的位置定義匿名函數(shù)對象的簡便方法,下面通過本文給大家介紹C++ 中的Lambda表達(dá)式寫法,需要的朋友參考下吧
    2017-02-02
  • C語言求向量和的兩則問題解答分享

    C語言求向量和的兩則問題解答分享

    這篇文章主要介紹了C語言求向量和的兩則問題解答分享,分別是求連續(xù)子向量的最大和和任何連續(xù)最接近0的子向量的和的問題,需要的朋友可以參考下
    2016-04-04
  • c++中八大排序算法

    c++中八大排序算法

    本篇文章主要介紹了八大排序算法,詳細(xì)的介紹了八個算法思想,實(shí)現(xiàn)代碼,穩(wěn)定性,時間復(fù)雜度等,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • C++ Qt開發(fā)之使用QProcess實(shí)現(xiàn)進(jìn)程管理

    C++ Qt開發(fā)之使用QProcess實(shí)現(xiàn)進(jìn)程管理

    Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應(yīng)用程序,本文將重點(diǎn)介紹如何運(yùn)用QProcess組件實(shí)現(xiàn)針對進(jìn)程的控制管理等,感興趣的可以了解下
    2024-03-03
  • C語言實(shí)現(xiàn)掃雷游戲(含注釋詳解)

    C語言實(shí)現(xiàn)掃雷游戲(含注釋詳解)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)掃雷游戲,含注釋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++中cout的格式使用詳細(xì)介紹

    C++中cout的格式使用詳細(xì)介紹

    cout 是C++中 ostream 類型的對象,該類被封裝在 < iostream > 庫中,該庫定義的名字都在命名空間 std 中,所以 cout 全稱是 std::cout 。本文重點(diǎn)給大家介紹C++中cout的格式使用,需要的朋友參考下吧
    2021-06-06
  • VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    本文主要介紹了VisualStudio2022 cmake配置opencv開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • C語言中feof函數(shù)和ferror函數(shù)示例詳解

    C語言中feof函數(shù)和ferror函數(shù)示例詳解

    在C語言中feof函數(shù)用于檢查文件流的結(jié)束標(biāo)志,判斷文件在讀取時是否已經(jīng)到達(dá)了文件的末尾,這篇文章主要給大家介紹了關(guān)于C語言中feof函數(shù)和ferror函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • C語言實(shí)現(xiàn)掃雷游戲(初級版)

    C語言實(shí)現(xiàn)掃雷游戲(初級版)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)掃雷游戲初級版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C++中 靜態(tài)局部變量實(shí)例詳解

    C++中 靜態(tài)局部變量實(shí)例詳解

    這篇文章主要介紹了C++中 靜態(tài)局部變量實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評論

进贤县| 韶山市| 夏津县| 威宁| 信丰县| 凯里市| 石景山区| 高雄市| 巴里| 仁布县| 仁布县| 巩义市| 阿城市| 荃湾区| 霍山县| 沂南县| 柘城县| 兰州市| 奉新县| 台北市| 龙江县| 津市市| 达孜县| 安平县| 建昌县| 宁国市| 永平县| 宜兴市| 奉新县| 滁州市| 泸水县| 富顺县| 莫力| 隆尧县| 丹寨县| 望城县| 乌海市| 麟游县| 石棉县| 依安县| 蒙自县|