1. 程式人生 > >C語言const關鍵字的四種用法

C語言const關鍵字的四種用法

#include <stdio.h>

/*
gcc中,const是通過編譯器在編譯的時候執行檢查來確保實現的(也就是
說const型別的變數不能改是編譯錯誤,不是執行時錯誤。)所以我們只要想辦法騙過編譯器,
就可以修改const定義的常量,而執行時不會報錯。
*/
int  main(int argc, char const *argv[])
{

     /*
     const int a;  / 
     int const a; 有一樣的意思
     如果我們給出 const int  a;你應該知道這是將a常量化了,但是為什麼那?
     那是因為int 和const
都作為一個型別限定詞,有相同的地位。 所以你也可以寫成 int const a;似乎這樣更加好理解!當然這都不難, 難點在哪裡哪?當然此時你如果定義指標也是可以修改的,但是會報警告! 當然強制型別轉換後警告也不會報了! 所以 const int a=10; 是申明瞭一個只可讀的變數,如果 a=12;在編譯期報錯。 */ /*1、申明一個常變數*/ const int a=10; /* a =12; 變異錯誤,a是編譯期常量 */ int b=10,c=55; /*2、 申明一個指標, 該指標指向的變數不可更改 ,相當於通過*p指標獲得了原來例項的可讀版本 一般用於子函式呼叫中形參函式,限制子函式中不能對呼叫放內容進行更改 如 const
char* src; 或 char const *src; *p是常量。也就是說,p指向的資料是常量 const int* p int const *P; const int* p; 這是修飾了誰那?其實我們可以這樣想,如果我們把int 拿出來 也就是 const int (*p); 等價於 int const (*p); 由此我們可以看出來const修飾了*p啊! 也就是指向的內容不可以改變,比如p已經指向a變數,但是*p=45;會報錯,因為*p不可改變 但是地址是可以改變的。比如c=55
, p=&c;是正確的 但是我們如果寫為int const *p 似乎就非常好理解了。就是修飾了*p */ const int* p=&a; /* *p=45; 會報錯 */ p=&c;//正確做法 //*p=445; 不可更改 c=43534;//通過原來變數名可更改,相當於通過p指標獲得了c變數的可讀版本 int const *ptr=&b; /* *ptr=44; *ptr 是不可更改 */ /* 3、 申明一個常指標變數 也就是說 該指標你只能賦值一次, 且只能在定義時候賦值 ; 但是指標指向的變數可以改變 int * const p; */ int* const ptr2=&b; *ptr2=3454; fprintf(stdout, "%d\n", *ptr2 ); /* 4const int *const p 表示p指標是一個常指標變數,同時指向的變數也是常量不可更改 */ const int *const ptr3=&c; /* ptr3=&a; 錯誤,ptr3 是常指標變數, 只讀的 */ /* *ptr3=80; 錯誤,*ptr3 是常量不可更改,只讀的 */ return 0; }

相關推薦

C++:const用法

一、用const修飾函式引數1、修飾指標,可以防止指標被修改void test(const ClassA* a) { ClassA** b = &a; //編譯錯誤,不能對const指標取地址 ClassA* c = a; //編譯錯誤,不能將cons

C語言const關鍵字用法

#include <stdio.h> /* gcc中,const是通過編譯器在編譯的時候執行檢查來確保實現的(也就是 說const型別的變數不能改是編譯錯誤,不是執行時錯誤。)所以

C語言const關鍵字用法總結

一、const修飾普通變數 1、說 const 定義的是變數,但又相當於常量;說它定義的是常量,但又有變數的屬性,所以叫常變數。用 const 定義常變數的方法很簡單,就在通常定義變數時前面加 const 即可,如: const int a = 10; int const a = 10;

c++中for的用法

四種 mes pre using In col space c++ names #include <algorithm> #include <vector> #include <iostream> using namespace

C語言學習及應用筆記之三:C語言const關鍵字及其使用

在C語言程式中,const關鍵字也是經常會用到的一個關鍵字,那麼使用const關鍵字的目的是什麼呢?事實上,在程式中使用const關鍵字的主要目的就是為了向使用者傳遞設計者的一些意圖。 事實上,無論我們是使用const關鍵字宣告變數還是宣告引數,其目的都是為了告訴使用者這個

C語言中的作用域

C語言編譯器可以確認四種不同型別的作用域: 一.程式碼塊作用域。 在K&R C中,函式形參的作用域始於形參的宣告處,位於函式體之外如果函式體內部聲明瞭名字相同的區域性變數,他們就將隱藏起來;ANSI C遏止了這種錯誤的可能性,它把形參的作用域設定為整個函式體。

C語言支援的變數儲存型別

一)auto:auto稱為自動變數(區域性變數)。區域性變數是指在函式內部說明的變數(有時也稱為自動變數)。所有的非全程變數都被認為是區域性變數,所以auto實際上從來不用。區域性變數在函式呼叫時自動產生,但不會自動初始化,隨函式呼叫的結束,這個變數也就自動消失了。下次呼叫

c語言-變數的儲存型別

auto         自動變數register     暫存器變數extern 外部變數static 靜態變數 一般形式:儲存型別說明符 資料型別說明符 變數名,變數名...static int a,b; auto char c1,c2; static int a[3

C語言中的儲存型別

   一、 首先來說說資料的型別,所有的資料都有兩種型別,一是常見的資料型別,如int,float等,一種便是今天的重頭戲,儲存型別。總共有四種儲存型別的變數,分別為自動變數(auto)、靜態變數(s

C語言除錯的方式

一. 編譯器警告: 1. 預設, 編譯器不生成所有警告。 2.使用 gcc -Wall 二. printf語句 1.Print to stderr instead of stdout         •fprintf(stderr, ….) 三. assert

c語言const關鍵字與巨集的區別

這是因為和巨集比起來: 1. const修飾的是一個變數,所以會在程式碼編譯階段進行語法檢查。 而巨集只會在預編譯階段進行簡單的替換動作; 2. 使用const修飾的是一個變數,具有具體的資料型別,所以編譯器會進行型別檢查。 3. 可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 以常見的strcpy

Java static關鍵字用法

static關鍵字,是我們在java開發中必須掌握的關鍵字之一,不同的關鍵字有著不同的作用,在適合的環境下運用可以,可以提高程式的執行效能,優化程式的結構。 靜態成員的使用“類名.靜態成員”

C# this關鍵字用法

end 復制代碼 replace 原始類型 catch 擴展 取數據 convert exec 用法一 this代表當前類的實例對象 namespace Demo { public class Test { private string

C/C++中const關鍵字用法及其與宏定義的比較

類型安全 屬性 const關鍵字 code oid 程序 函數返回值 存儲空間 臨時對象 1.const關鍵字的性質 簡單來說:const關鍵字修飾的變量具有常屬性。 即它所修飾的變量不能被修改。 2.修飾局部變量 1 const int a = 10; 2 int co

關於c語言關鍵字extern用法

com 分享 color ima pri int round mage printf 看c語言的ppt看到extern中的生命外部變量,懵逼了。然後在網上查了關於extern的用法。都不是我想要的。 找了半個小時,又寫寫程序,算是明白了。 extern聲明外部變量時候,也

C語言學習及應用筆記之C語言volatile關鍵字及其使用

  在C語言中,還有一個並不經常使用但卻非常有用的關鍵字volatile。那麼使用volatile關鍵字究竟能幹什麼呢?接下來我將就此問題進行討論。   一個使用volatile關鍵字定義變數,其實就是告訴編譯系統這變數可能會被意想不到地改變。那麼編譯時,編譯器就不會自作主張的去假設這個變數的值,而進行程式

c語言const用法總結

這裡講的是c中的const不是cpp中的 int const a 等價於 int const b char * const p 表示指標變數p中的地址不可被修改 const char *p  表示指標p指向的記憶體空間不可被修改 const chat * co

c#呼叫python的方法(嘗試了,只詳細講解本人成功的後兩,其餘方法只列出,詳細用法請自行谷歌百度)

一、使用c#,nuget管理包上下載的ironPython安裝包      嘗試後發現,對引用了numpy等第三方庫的python程式碼,會報找不到模組xxx的錯誤,上網查證後發現此問題基本難以解決 二、使用c++程式呼叫python檔案,然後將其做成動態連結庫

[java]static關鍵字用法

在java的關鍵字中,static和final是兩個我們必須掌握的關鍵字。不同於其他關鍵字,他們都有多種用法,而且在一定環境下使用,可以提高程式的執行效能,優化程式的結構。下面我們先來了解一下static關鍵字及其用法。 static關鍵字 1.修飾成員變數 在我們平時的使用當中,static最常用的功能就是

static關鍵字用法

在java的關鍵字中,static和final是兩個我們必須掌握的關鍵字。不同於其他關鍵字,他們都有多種用法,而且在一定環境下使用,可以提高程式的執行效能,優化程式的結構。下面我們先來了解一下static關鍵字及其用法。static關鍵字1.修飾成員變數在我們平時的使用當中,