• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習英語 > 專業英語 > 計算機英語 > c語言中const的用法

    c語言中const的用法

    時間: 長思709 分享

    c語言中const的用法

      C語言作為一門新型高級編程語言,在計算機軟件編程中具有較為廣泛的應用和實現。下面小編就跟你們詳細介紹下c語言中const的用法,希望對你們有用。

      c語言中const的用法如下:

      const的基本解釋

      const是一個C語言的關鍵字,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的健壯性,另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。

      雖然這聽起來很簡單,但實際上,const的使用也是c語言中一個比較微妙的地方,微妙在何處呢?請看下面幾個問題。

      問題:const變量 & 常量

      為什么我象下面的例子一樣用一個const變量來初始化數組,ANSI C的編譯器會報告一個錯誤呢?

      const int n = 5;

      int a[n];

      答案與分析:

      1)、這個問題討論的是“常量”與“只讀變量”的區別。常量肯定是只讀的,例如5, “abc”,等,肯定是只讀的,因為程序中根本沒有地方存放它的值,當然也就不能夠去修改它。而“只讀變量”則是在內存中開辟一個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。C語言關鍵字const就是用來限定一個變量不允許被改變的修飾符(Qualifier)。上述代碼中變量n被修飾為只讀變量,可惜再怎么修飾也不是常量。而ANSI C規定數組定義時維度必須是“常量”,“只讀變量”也是不可以的。

      2)、注意:在ANSI C中,這種寫法是錯誤的,因為數組的大小應該是個常量,而const int n,n只是一個變量(常量 != 不可變的變量,但在標準C++中,這樣定義的是一個常量,這種寫法是對的),實際上,根據編譯過程及內存分配來看,這種用法本來就應該是合理的,只是 ANSI C對數組的規定限制了它。

      3)、那么,在ANSI C 語言中用什么來定義常量呢?答案是enum類型和#define宏,這兩個都可以用來定義常量。

      問題:const變量 & const 限定的內容

      下面的代碼編譯器會報一個錯誤,請問,哪一個語句是錯誤的呢?

      typedef char * pStr;

      char string[4] = "abc";

      const char *p1 = string;

      const pStr p2 = string;

      p1++;

      p2++;

      答案與分析:

      問題出在p2++上。

      1)、const使用的基本形式: const char m; 限定m不可變。

      2)、替換1式中的m, const char *pm; 限定*pm不可變,當然pm是可變的,因此問題中p1++是對的。

      3)、替換1式char, const newType m; 限定m不可變,問題中的charptr就是一種新類型,因此問題中p2不可變,p2++是錯誤的。

      問題:const變量 & 字符串常量

      請問下面的代碼有什么問題?

      char *p = "i'm hungry!";

      p[0]= 'I';

      答案與分析:

      上面的代碼可能會造成內存的非法寫操作。分析如下, “i'm hungry”實質上是字符串常量,而常量往往被編譯器放在只讀的內存區,不可寫。p初始指向這個只讀的內存區,而p[0] = 'I'則企圖去寫這個地方,編譯器當然不會答應。

      問題:const變量 & 字符串常量2

      請問char a[3] = "abc" 合法嗎?使用它有什么隱患?

      答案與分析:

      在標準C中這是合法的,但是它的生存環境非常狹小;它定義一個大小為3的數組,初始化為“abc”。注意,它沒有通常的字符串終止符'

    學習啦 > 學習英語 > 專業英語 > 計算機英語 > c語言中const的用法

    c語言中const的用法

    時間: 長思709 分享

    c語言中const的用法

      C語言作為一門新型高級編程語言,在計算機軟件編程中具有較為廣泛的應用和實現。下面小編就跟你們詳細介紹下c語言中const的用法,希望對你們有用。

      c語言中const的用法如下:

      const的基本解釋

      const是一個C語言的關鍵字,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的健壯性,另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。

      雖然這聽起來很簡單,但實際上,const的使用也是c語言中一個比較微妙的地方,微妙在何處呢?請看下面幾個問題。

      問題:const變量 & 常量

      為什么我象下面的例子一樣用一個const變量來初始化數組,ANSI C的編譯器會報告一個錯誤呢?

      const int n = 5;

      int a[n];

      答案與分析:

      1)、這個問題討論的是“常量”與“只讀變量”的區別。常量肯定是只讀的,例如5, “abc”,等,肯定是只讀的,因為程序中根本沒有地方存放它的值,當然也就不能夠去修改它。而“只讀變量”則是在內存中開辟一個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。C語言關鍵字const就是用來限定一個變量不允許被改變的修飾符(Qualifier)。上述代碼中變量n被修飾為只讀變量,可惜再怎么修飾也不是常量。而ANSI C規定數組定義時維度必須是“常量”,“只讀變量”也是不可以的。

      2)、注意:在ANSI C中,這種寫法是錯誤的,因為數組的大小應該是個常量,而const int n,n只是一個變量(常量 != 不可變的變量,但在標準C++中,這樣定義的是一個常量,這種寫法是對的),實際上,根據編譯過程及內存分配來看,這種用法本來就應該是合理的,只是 ANSI C對數組的規定限制了它。

      3)、那么,在ANSI C 語言中用什么來定義常量呢?答案是enum類型和#define宏,這兩個都可以用來定義常量。

      問題:const變量 & const 限定的內容

      下面的代碼編譯器會報一個錯誤,請問,哪一個語句是錯誤的呢?

      typedef char * pStr;

      char string[4] = "abc";

      const char *p1 = string;

      const pStr p2 = string;

      p1++;

      p2++;

      答案與分析:

      問題出在p2++上。

      1)、const使用的基本形式: const char m; 限定m不可變。

      2)、替換1式中的m, const char *pm; 限定*pm不可變,當然pm是可變的,因此問題中p1++是對的。

      3)、替換1式char, const newType m; 限定m不可變,問題中的charptr就是一種新類型,因此問題中p2不可變,p2++是錯誤的。

      問題:const變量 & 字符串常量

      請問下面的代碼有什么問題?

      char *p = "i'm hungry!";

      p[0]= 'I';

      答案與分析:

      上面的代碼可能會造成內存的非法寫操作。分析如下, “i'm hungry”實質上是字符串常量,而常量往往被編譯器放在只讀的內存區,不可寫。p初始指向這個只讀的內存區,而p[0] = 'I'則企圖去寫這個地方,編譯器當然不會答應。

      問題:const變量 & 字符串常量2

      請問char a[3] = "abc" 合法嗎?使用它有什么隱患?

      答案與分析:

      在標準C中這是合法的,但是它的生存環境非常狹小;它定義一個大小為3的數組,初始化為“abc”。注意,它沒有通常的字符串終止符'\0',因此這個數組只是看起來像C語言中的字符串,實質上卻不是,因此所有對字符串進行處理的函數,比如strcpy、printf等,都不能夠被使用在這個假字符串上。

      問題5:const & 指針

      類型聲明中const用來修飾一個常量,有如下兩種寫法,那么,請問,下面分別用const限定不可變的內容是什么?

      1)、const在前面

      const int nValue; //nValue是const

      const char *pContent; //*pContent是const, pContent可變

      const (char *) pContent;//pContent是const,*pContent可變

      char* const pContent; //pContent是const,*pContent可變

      const char* const pContent; //pContent和*pContent都是const

      2)、const在后面,與上面的聲明對等

      int const nValue; // nValue是const

      char const * pContent;// *pContent是const, pContent可變

      (char *) const pContent;//pContent是const,*pContent可變

      char* const pContent;// pContent是const,*pContent可變

      char const* const pContent;// pContent和*pContent都是const

      答案與分析:

      const和指針一起使用是C語言中一個很常見的困惑之處,在實際開發中,特別是在看別人代碼的時候,常常會因為這樣而不好判斷作者的意圖,下面講一下我的判斷原則:

      沿著*號劃一條線,如果const位于*的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位于*的右側,const就是修飾指針本身,即指針本身是常量。你可以根據這個規則來看上面聲明的實際意義,相信定會一目了然。

      另外,需要注意:對于const (char *) ; 因為char *是一個整體,相當于一個類型(如 char),因此,這是限定指針是const。

      另=======

      const用于函數時出現三個位置:

      例如:

      const returnVal function (const list_array)const;

      第一個const意思是:返回值是常量

      第二個const意思是:函數過程中不能修改list_array的值

      第三個const意思是:函數過程不能隱式的修改function參數的值

      ===

      zzhttp://publishblog.blogchina.com/blog/tb.b?diaryID=3217823

      const char*, char const*, char*const的區別問題幾乎是C++面試中每次都會有的題目。

      Bjarne在他的The C++ Programming Language里面給出過一個助記的方法:把一個聲明從右向左讀。

      char * const cp; ( * 讀成 pointer to ) :cp is a const pointer to char

      const char * p; :p is a pointer to const char;

      char const * p;

      同上因為C++里面沒有const*的運算符,所以const只能屬于前面的類型。

      另:下面定義的一個指向字符串的常量指針:

      char * const prt1 = stringprt1;

      其中,ptr1是一個常量指針。因此,下面賦值是非法的。 ptr1 = stringprt2;

      而下面的賦值是合法的: *ptr1 = "m";

      因為指針ptr1所指向的變量是可以更新的,不可更新的是常量指針ptr1所指的方向(別的字符串)。

      下面定義了一個指向字符串常量的指針:

      const * ptr2 = stringprt1;

      其中,ptr2是一個指向字符串常量的指針。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此,

      *ptr2 = "x"; 是非法的,而: ptr2 = stringptr2; 是合法的。

      所以,在使用const修飾指針時,應該注意const的位置。定義一個指向字符串的指針常量和定義一個指向字符串常量的指針時,const修飾符的位置不同,前者const放在*和指針名之間,后者const放在類型說明符前。

    ',因此這個數組只是看起來像C語言中的字符串,實質上卻不是,因此所有對字符串進行處理的函數,比如strcpy、printf等,都不能夠被使用在這個假字符串上。

      問題5:const & 指針

      類型聲明中const用來修飾一個常量,有如下兩種寫法,那么,請問,下面分別用const限定不可變的內容是什么?

      1)、const在前面

      const int nValue; //nValue是const

      const char *pContent; //*pContent是const, pContent可變

      const (char *) pContent;//pContent是const,*pContent可變

      char* const pContent; //pContent是const,*pContent可變

      const char* const pContent; //pContent和*pContent都是const

      2)、const在后面,與上面的聲明對等

      int const nValue; // nValue是const

      char const * pContent;// *pContent是const, pContent可變

      (char *) const pContent;//pContent是const,*pContent可變

      char* const pContent;// pContent是const,*pContent可變

      char const* const pContent;// pContent和*pContent都是const

      答案與分析:

      const和指針一起使用是C語言中一個很常見的困惑之處,在實際開發中,特別是在看別人代碼的時候,常常會因為這樣而不好判斷作者的意圖,下面講一下我的判斷原則:

      沿著*號劃一條線,如果const位于*的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位于*的右側,const就是修飾指針本身,即指針本身是常量。你可以根據這個規則來看上面聲明的實際意義,相信定會一目了然。

      另外,需要注意:對于const (char *) ; 因為char *是一個整體,相當于一個類型(如 char),因此,這是限定指針是const。

      另=======

      const用于函數時出現三個位置:

      例如:

      const returnVal function (const list_array)const;

      第一個const意思是:返回值是常量

      第二個const意思是:函數過程中不能修改list_array的值

      第三個const意思是:函數過程不能隱式的修改function參數的值

      ===

      zzhttp://publishblog.blogchina.com/blog/tb.b?diaryID=3217823

      const char*, char const*, char*const的區別問題幾乎是C++面試中每次都會有的題目。

      Bjarne在他的The C++ Programming Language里面給出過一個助記的方法:把一個聲明從右向左讀。

      char * const cp; ( * 讀成 pointer to ) :cp is a const pointer to char

      const char * p; :p is a pointer to const char;

      char const * p;

      同上因為C++里面沒有const*的運算符,所以const只能屬于前面的類型。

      另:下面定義的一個指向字符串的常量指針:

      char * const prt1 = stringprt1;

      其中,ptr1是一個常量指針。因此,下面賦值是非法的。 ptr1 = stringprt2;

      而下面的賦值是合法的: *ptr1 = "m";

      因為指針ptr1所指向的變量是可以更新的,不可更新的是常量指針ptr1所指的方向(別的字符串)。

      下面定義了一個指向字符串常量的指針:

      const * ptr2 = stringprt1;

      其中,ptr2是一個指向字符串常量的指針。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。因此,

      *ptr2 = "x"; 是非法的,而: ptr2 = stringptr2; 是合法的。

      所以,在使用const修飾指針時,應該注意const的位置。定義一個指向字符串的指針常量和定義一個指向字符串常量的指針時,const修飾符的位置不同,前者const放在*和指針名之間,后者const放在類型說明符前。

    522675 主站蜘蛛池模板: 中文字幕影片免费在线观看 | 女人自慰AA大片| 天堂久久久久久中文字幕| 国产肥老上视频| 国产精品亚洲小说专区| 国产又大又黑又粗免费视频 | 亚洲欧美一级久久精品| 久久青青成人亚洲精品| 中国胖女人一级毛片aaaaa| 99在线精品免费视频| 黑人解禁濑亚美莉| 练瑜伽的时候进入| 波多野结衣与上司出差| 日韩精品免费在线视频| 成人a视频片在线观看免费| 在线免费h视频| 国产内射爽爽大片视频社区在线 | 亚洲最大成人网色香蕉| 羞羞漫画小舞被黄漫免费| 欧美视频久久久| 欧美性大战xxxxx久久久| 日韩国产成人精品视频| 帅教官的裤裆好大novels| 国产激情视频一区二区三区| 动漫h肉yin文| 久久精品久久久久观看99水蜜桃| jizzjizz日本护士| 蜜桃臀无码内射一区二区三区| 欧美综合人人做人人爱| 性xxxx黑人与亚洲| 国产在线中文字幕| 亚洲日本一区二区三区在线不卡| 上原亚衣一区二区在线观看| 国产精品乳摇在线播放| 正能量www正能量免费网站| 无码中文字幕av免费放| 国产成人精品福利网站在线| 亚洲福利在线视频| 一本一道精品欧美中文字幕| 高清一区二区在线观看| 欧美午夜在线播放|