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

關(guān)于define與C 的內(nèi)存

 更新時間:2016年07月06日 17:14:10   投稿:lqh  
本文主要介紹了C語言中#define到底存在程序的哪個區(qū),以及工作流程和效率與普通函數(shù)的區(qū)別,希望能幫助需要的小伙伴

問題1:#define到底存在程序的哪個區(qū)?

自己寫了一個小程序驗證一下第一個問題。

程序代碼:

<span style="font-size:18px;">#include <stdio.h>
#include <STDLIB.H>
#define kMAX 100
typedef struct {
	int ID;
	char * name;
}Student;

void test()
{
	return;
}

//常量區(qū),靜態(tài)區(qū),堆區(qū),棧區(qū),程序代碼區(qū)

const int a = 100;
char * b = "ok123";

int main()
{
	Student stu = {10,"張三"};
	int n = 9999;
	int *p = &n;
	int num[10] = {1,2,3,4};
	int *ap=(int*)malloc(100*sizeof(int));//動態(tài)分配內(nèi)存
	static int k = 9;

	printf("常量區(qū)\n");
	printf("const int(%p)\n",&a);
	printf("char *(%p)\n",b);
	printf("靜態(tài)區(qū)\n");
	printf("static int (%p)\n",&k);
	printf("堆區(qū)\n");
	printf("(int*)malloc(100*sizeof(int))(%p)\n",ap);
	printf("棧區(qū)\n");
	printf("struct int(%p),struct char *(%p)\n",&stu.ID,&stu.name);
	printf("int [](%p)\n",num);
	printf("int *(%p)\n",&p);
	printf("int(%p)\n",&n);
	printf("程序代碼區(qū)\n");
	printf("test()(%p)\n",test);
	printf("未知\n");
	printf("define (%p)\n",kMAX);
	
	free(ap);

	return 0;
}</span>

 發(fā)現(xiàn):

1、通過運行代碼可以看出程序的幾個內(nèi)存區(qū)互不相鄰;

2、#define的內(nèi)存單元在程序運行前已經(jīng)分配。

3、我們知道,char *會存在常量區(qū),但如果我們把char *“封裝”到一個struct里,這時它會同該struct分配到棧區(qū)中,也就是說,我們可以修改struct中char *里的值。

----------------------------------------------------------------------------------------------------------------------------------------------------------

問題2:我們已經(jīng)知道,宏實質(zhì)上是替換,而函數(shù)是傳參,調(diào)用。那么,帶參數(shù)宏與普通函數(shù)在效率上有什么區(qū)別?

通過查閱一些資料了解到

1、普通函數(shù)是在程序運行時調(diào)用,程序會給它的成員分配內(nèi)存。而帶參宏是在編譯前就已經(jīng)執(zhí)行,并且不會分配內(nèi)存單元。

2、宏替換不占用運行時間,只占用編譯時間。函數(shù)則占用運行時間。所以,如果想提高程序運行效率,可以用宏代替部分函數(shù)。

相關(guān)文章

  • C++提取文件名與提取XML文件的方法詳解

    C++提取文件名與提取XML文件的方法詳解

    這篇文章主要為大家詳細介紹了C++提取文件名與提取XML文件的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2022-03-03
  • Matlab實現(xiàn)繪制有氣泡感的網(wǎng)絡(luò)圖

    Matlab實現(xiàn)繪制有氣泡感的網(wǎng)絡(luò)圖

    這篇文章主要介紹了如何利用Matlab實現(xiàn)繪制有氣泡感的網(wǎng)絡(luò)圖,文中的示例代碼講解詳細,對我們學習Matlab有一定的幫助,需要的可以參考一下
    2023-02-02
  • 深入解析C++設(shè)計模式編程中解釋器模式的運用

    深入解析C++設(shè)計模式編程中解釋器模式的運用

    這篇文章主要介紹了C++設(shè)計模式編程中解釋器模式的運用,解釋器模式給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子,需要的朋友可以參考下
    2016-03-03
  • C++面向行輸入之get()與getline()實例詳解

    C++面向行輸入之get()與getline()實例詳解

    在c++里當我們輸入一個字符串時習慣用cin,但是cin只能讀取一段不含空格的字符串,如果我們需要讀取一段包含空格的字符串時,就需要用到getline()或get(),下面這篇文章主要給大家介紹了關(guān)于C++面向行輸入之get()與getline()的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • C++中Boost的智能指針weak_ptr

    C++中Boost的智能指針weak_ptr

    這篇文章介紹了C++中Boost的智能指針weak_ptr,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 淺談c++中的輸入輸出方法

    淺談c++中的輸入輸出方法

    下面小編就為大家?guī)硪黄獪\談c++中的輸入輸出方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 使用MySQL編程實現(xiàn)C語言功能強大化步驟示例

    使用MySQL編程實現(xiàn)C語言功能強大化步驟示例

    這篇文章主要為大家介紹了使用MySQL編程實現(xiàn)C語言功能強大化步驟示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • C++用mysql自帶的頭文件連接數(shù)據(jù)庫

    C++用mysql自帶的頭文件連接數(shù)據(jù)庫

    現(xiàn)在正做一個接口,通過不同的連接字符串操作不同的數(shù)據(jù)庫。要用到mysql數(shù)據(jù)庫。通過網(wǎng)上的一些資料和自己的摸索,大致清楚了C++連接mysql的方法??梢酝ㄟ^2種方法實現(xiàn)。第一種方法是利用ADO連接,第二種方法是利用mysql自己的api函數(shù)進行連接。今天主要來講解下使用API
    2016-07-07
  • C++中std::chrono時間庫的全面解析

    C++中std::chrono時間庫的全面解析

    C++?std::chrono時間庫是C++標準庫提供的一個時間處理庫,提供了一個方便、靈活和精確的時間處理工具,下面小編就帶大家深入了解一下std::chrono時間庫的使用吧
    2023-10-10
  • C語言多媒體框架GStreamer使用教程深講

    C語言多媒體框架GStreamer使用教程深講

    GStreamer 是用來構(gòu)建流媒體應(yīng)用的開源多媒體框架(framework),其目標是要簡化音/視頻應(yīng)用程序的開發(fā),已經(jīng)能夠被用來處理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多種格式的多媒體數(shù)據(jù)
    2022-07-07

最新評論

汶川县| 贵溪市| 松潘县| 辽源市| 蓝山县| 彰化市| 深圳市| 新竹市| 明水县| 基隆市| 蒲城县| 乐东| 桐城市| 赤峰市| 霍山县| 桂平市| 庆城县| 沙田区| 大兴区| 方山县| 龙江县| 扶余县| 巴林右旗| 南靖县| 巢湖市| 大兴区| 台山市| 桂阳县| 都安| 吴忠市| 威信县| 炎陵县| 安远县| 武胜县| 新邵县| 丰宁| 比如县| 嘉禾县| 平谷区| 安徽省| 屏东市|