av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

講解一下constchar*,charconst*,char*const的區(qū)別

本篇文章重點(diǎn)為大家講解一下const char*, char const*, char*const 的區(qū)別,有需要的小伙伴可以參考一下。

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;

同上因?yàn)镃++里面沒有const*的運(yùn)算符,所以const只能屬于前面的類型。

C++標(biāo)準(zhǔn)規(guī)定,const關(guān)鍵字放在類型或變量名之前等價的。

const int n=5;    //same as below
int const m=10;

const int *p;    //same as below  const (int) * p
int const *q;    // (int) const *p


char ** p1;
//    pointer to    pointer to    char
const char **p2;
//    pointer to    pointer to const char
char * const * p3;
//    pointer to const pointer to    char
const char * const * p4;
//    pointer to const pointer to const char
char ** const p5;
// const pointer to    pointer to    char
const char ** const p6;
// const pointer to    pointer to const char
char * const * const p7;
// const pointer to const pointer to    char
const char * const * const p8;
// const pointer to const pointer to const char

說到這里,我們可以看一道以前Google的筆試題:

const char *p="hello";      
foo(&p);  // 函數(shù)foo(const char **pp)下面說法正確的是[]

A.函數(shù)foo()不能改變p指向的字符串內(nèi)容。 B.函數(shù)foo()不能使指針p指向malloc生成的地址。 C.函數(shù)foo()可以使p指向新的字符串常量。 D.函數(shù)foo()可以把p賦值為 NULL。

至于這道題的答案是眾說紛紜。針對上面這道題,我們可以用下面的程序測試:

#include
#include
#include
void foo(const char **pp)
{
//    *pp=NULL;
//    *pp="Hello world!";
     *pp = (char *) malloc(10);
     snprintf(*pp, 10, "hi google!");
//       (*pp)[1] = 'x';
}
int
main()
{
 const char *p="hello";
 printf("before foo %s/n",p);
 foo(&p);
 printf("after foo %s/n",p);
 p[1] = 'x';
 return;
}

結(jié)論如下:

  1. 在foo函數(shù)中,可以使main函數(shù)中p指向的新的字符串常量。
  2. 在foo函數(shù)中,可以使main函數(shù)中的p指向NULL。
  3. 在foo函數(shù)中,可以使main函數(shù)中的p指向由malloc生成的內(nèi)存塊,并可以在main中用free釋放,但是會有警告。但是注意,即使在foo中讓p指向了由malloc生成的內(nèi)存塊,但是仍舊不能用p[1]=’x’;這樣的語句改變p指向的內(nèi)容。
  4. 在foo中,不能用(*pp)[1]=’x’;這樣的語句改變p的內(nèi)容。

所以,感覺gcc只是根據(jù)const的字面的意思對其作了限制,即對于const char*p這樣的指針,不管后來p實(shí)際指向malloc的內(nèi)存或者常量的內(nèi)存,均不能用p[1]=’x’這樣的語句改變其內(nèi)容。但是很奇怪,在foo里面,對p指向malloc的內(nèi)存后,可以用snprintf之類的函數(shù)修改其內(nèi)容。


網(wǎng)站標(biāo)題:講解一下constchar*,charconst*,char*const的區(qū)別
網(wǎng)站路徑:http://uogjgqi.cn/article/djjgpjj.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流