<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦 > 學習英語 > 專業英語 > 計算機英語 > 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 主站蜘蛛池模板: 国产精品偷伦在线观看| 国产国拍精品av在线观看| 亚洲高清揄拍自拍| 在国产线视频A在线视频| 久久av无码精品人妻出轨| 国产地址二永久伊甸园| 久热爱精品视频线路一| 国产午夜美女福利短视频| 成人午夜在线观看日韩| 精品国产一区二区三区国产区| 国产极品丝尤物在线观看| 亚洲色一区二区三区四区| ww污污污网站在线看com| 亚洲va成无码人在线观看天堂| 日本三级成人中文字幕乱码| 亚洲人成网网址在线看| 久久大香萑太香蕉av| 亚洲av无码乱码在线观看野外| 少妇尿尿一区二区在线免费| 91色老久久精品偷偷性色| 熟女少妇精品一区二区| 99RE6在线观看国产精品| 影音先锋女人AA鲁色资源| 国内精品久久久久影院不卡| 亚洲伊人久久综合影院| 亚洲人成网站久久久综合| 久章草在线毛片视频播放| 午夜福利在线一区二区| 亚洲另类激情专区小说图片 | 久久高清超碰AV热热久久| 久草热久草热线频97精品| 无码午夜人妻一区二区三区不卡视频 | 国产三级精品片| 人妻精品久久无码区| 黑人巨大精品oideo| 亚洲高清aⅴ日本欧美视频| 午夜福利在线观看成人| 亚洲欧美成人久久综合中文网| 国产午夜亚洲精品不卡下载| 亚洲人成网77777香蕉| 国产对白老熟女正在播放|