中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言宏與指針如何使用

發布時間:2022-06-14 09:31:40 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

這篇文章主要講解了“C語言宏與指針如何使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言宏與指針如何使用”吧!

1、關于define

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

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

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

運行結果為1000.

下面的例子是define定義宏

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

運行結果為5.

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

2、初識指針

(1)內存

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

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

如下圖所示:

C語言宏與指針如何使用

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

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

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

00000000 00000000 00000000 00000000

&hellip;

01111111 11111111 11111111 11111111

10000000 00000000 00000000 00000000

&hellip;

11111111 1111111 111111111 111111111

一個這樣的內存單元是多大的空間呢?

假設一個內存單元是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

實際上在32位機器的時候,2GB的內存已經很常見了。C語言中最小的單位是char類型,char類型是1byte=8bit-8個地址,有點浪費地址了。最終平衡一下,一個內存單元是一個字節的空間,然后進一步地分配地址的。

(2)示例

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

運行結果為:00000054E6EFFBE4,&a拿到的是四個字節中的第一個字節的地址。

再舉個例子:

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

運行結果為:

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。

運行結果為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;
}

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

8

8

8

8

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

32位機器上其實是32個比特位組成的二進制序列,32bit=4byte

64位機器上其實是64個比特位組成的二進制序列,64bit=8byte

感謝各位的閱讀,以上就是“C語言宏與指針如何使用”的內容了,經過本文的學習后,相信大家對C語言宏與指針如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大足县| 图木舒克市| 乌鲁木齐县| 弥勒县| 古丈县| 沈阳市| 吴旗县| 炎陵县| 仪征市| 阿勒泰市| 安顺市| 天长市| 梓潼县| 额敏县| 河曲县| 宝应县| 阿鲁科尔沁旗| 安顺市| 海丰县| 华蓥市| 革吉县| 重庆市| 克东县| 太仆寺旗| 武邑县| 鄂尔多斯市| 绍兴市| 河曲县| 六枝特区| 曲阜市| 佛学| 宣汉县| 扎兰屯市| 仁怀市| 平遥县| 宾川县| 阿尔山市| 涪陵区| 禄劝| 福建省| 盈江县|