c語言const關鍵字與巨集的區別
1. const修飾的是一個變數,所以會在程式碼編譯階段進行語法檢查。
而巨集只會在預編譯階段進行簡單的替換動作;
2. 使用const修飾的是一個變數,具有具體的資料型別,所以編譯器會進行型別檢查。
3. 可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。
以常見的strcpy函式為例,
#include <string.h>
char *strcpy(char *dest, const char *src);
使用const修飾了char *src引數,這表示在strcpy函式內部是不能向src這個char指標指向的位置寫入資料的。
如果有寫入資料,則編譯器就會報錯。
4. 可以節省記憶體空間,避免不必要的記憶體分配。
因為const修飾的是變數,所以在記憶體中只有一份拷貝;
而巨集定義只會在預編譯階段進行簡單的替換動作,所以使用巨集的地方都會被替換掉。
相關推薦
c語言const關鍵字與巨集的區別
這是因為和巨集比起來: 1. const修飾的是一個變數,所以會在程式碼編譯階段進行語法檢查。 而巨集只會在預編譯階段進行簡單的替換動作; 2. 使用const修飾的是一個變數,具有具體的資料型別,所以編譯器會進行型別檢查。 3. 可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 以常見的strcpy
C語言const和define的區別
一份 安全 font 預處理 tro span ble 展開 區別 const 定義的是變量不是常量,只是這個變量的值不允許改變是常變量!帶有類型。編譯運行的時候起作用存在類型檢查。 define 定義的是不帶類型的常數,只進行簡單的字符替換。在預編譯的時候起作用,不存在類
C語言const關鍵字的用法總結
一、const修飾普通變數 1、說 const 定義的是變數,但又相當於常量;說它定義的是常量,但又有變數的屬性,所以叫常變數。用 const 定義常變數的方法很簡單,就在通常定義變數時前面加 const 即可,如: const int a = 10; int const a = 10;
嵌入式C語言入門——關鍵字&巨集
C關鍵字 預處理 巨集函式 巨集的有效範圍 撤銷巨集 內建巨集 條件編譯ifdef #與## 關鍵字 Static Static修飾區域性變數 Stati
C語言學習及應用筆記之三:C語言const關鍵字及其使用
在C語言程式中,const關鍵字也是經常會用到的一個關鍵字,那麼使用const關鍵字的目的是什麼呢?事實上,在程式中使用const關鍵字的主要目的就是為了向使用者傳遞設計者的一些意圖。 事實上,無論我們是使用const關鍵字宣告變數還是宣告引數,其目的都是為了告訴使用者這個
C語言const關鍵字的四種用法
#include <stdio.h> /* gcc中,const是通過編譯器在編譯的時候執行檢查來確保實現的(也就是 說const型別的變數不能改是編譯錯誤,不是執行時錯誤。)所以
C語言的#define與關鍵字typedef的三點區別
兩者區別主要在於在三處不同 (1)與#define不同,typedef建立的符號名只受限於型別,不能用與值 #define N 10 //將10替換為N,ok #define M int //將int替換為M,ok typedef i
C/C++中const關鍵字的用法及其與宏定義的比較
類型安全 屬性 const關鍵字 code oid 程序 函數返回值 存儲空間 臨時對象 1.const關鍵字的性質 簡單來說:const關鍵字修飾的變量具有常屬性。 即它所修飾的變量不能被修改。 2.修飾局部變量 1 const int a = 10; 2 int co
C語言malloc()函式與calloc()函式的區別
推薦部落格: 推薦部落格:https://blog.csdn.net/ddcodingya/article/details/80452397 推薦部落格:https:https://blog.csdn.net/Hackbuteer1/article/d
C語言中陣列與指標的區別
本文是對《C語言深度剖析》一書內容的拓展,在看這本書的時候解了很多我之前的一些困惑,故在此記錄。對陣列的引用總是可以寫成對指標的引用,而且確實存在一種指標和陣列的定義完全相同的上下文環境。 但是指標和陣列還是在本質上是不一樣的。指標就是指標,指標變數在32位的系統下面是4B
c語言定義變數與宣告的區別
定義是要為變數分配儲存空間,還可以在定義的時候為變數指定初始值。 所謂的定義就是(編譯器)建立一個物件,為這個物件分配一塊記憶體並給它取上一個名字,這個名字就是我們經常所說的變數名或物件名。但注意,這個名字一旦和這塊記憶體匹配起來(可以想象是這個名字嫁給了這塊空間,沒有要彩
C語言傳地址與傳值的區別
C語言中,函式的引數分為傳值與傳地址,下面程式碼為傳值函式: #include<stdio.h> void function(int x,int y)//實現兩個引數交換 { int temp; temp
C語言-函式指標與函式名的區別
記得大學時老師曾說函式的函式名是函式的入口的指標,之前看block通過clang編譯生成的C程式碼發現很多函式指標,於是想了解函式指標與函式名有什麼區別?以及函式指標一般都有些什麼作用。函式指標與函式名的區別首先先定義一函式以及一個指向蓋函式的函式指標,並分別對他們進行呼叫。
c語言位運算子與邏輯運算子的區別
&&、||是邏輯運算子,用於從左到右求表示式的真值。假設x=1;y=2;那麼x&&y=1;x||y=1; &、|是位運算子,是對x,y進行位運算,x,y取值如上,那麼有x&y=0;(x的二進位制表示為00,y的二進位制表示為1
C語言中const和C++中const關鍵字的區別
# include "iostream" using namespace std; struct Teacher { char name[30]; int age; }; void operatorTeacher(Teacher *pT) {
C語言中關鍵字作用(const和static和extern)
儲存型別關鍵字(4個): auto: 宣告自動變數,現在一般不用(auto int a;和int a;一樣) register: 宣告暫存器變數 static: 宣告靜態變數。該變數宣告時系統所分配的
c語言邏輯運算與位運算區別
c語言中,邏輯運算與位運算很容易混淆,但是它們的功能是完全不同的。邏輯運算認為所有的非零的引數都為TRUE,引數0表示false,它們返回1或0. &&與||和&與|重要的區別是,如果第一個引數求值能確定表示式的結果,那麼邏輯運算子就不會對第二個引數
c++中列舉常量與巨集常量的一點區別
#include <iostream> using namespace std; class A { enum { APPLE = 111 }; #define PEAR 333 p
關於C語言的fprintf與fwrite使用區別
C語言把檔案看作一個字元(位元組)的序列,即由一個一個字元(位元組)的資料順序組成。根據資料的組織形式,可分為ASCII檔案和二進位制檔案。ASCII檔案又稱為文字(text)檔案,它的每個位元組放一個ASCII程式碼,代表一個字元。二進位制檔案是把記憶體中的資料按其
c語言==系統呼叫與庫函式的區別(28)
系統呼叫與庫函式的區別? (1)庫函式是語言或應用程式的一部分,而系統呼叫是核心提供給應用程式的介面,屬於系統的一部分 (2)庫函式在使用者地址空間執行,系統呼叫是在核心地址空間執行,庫函式執行