国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

在C/C++中,指針和數(shù)組的區(qū)別

2020-02-24 14:38:30
字體:
供稿:網(wǎng)友

在C/C++中,指針和數(shù)組在很多地方可以互換使用,這使得我們產(chǎn)生一種錯覺,感覺數(shù)組和指針兩者是完全等價的,事實上數(shù)組和指針是有很大的區(qū)別的。
1.兩者在含義上的區(qū)別。
數(shù)組對應(yīng)著一塊內(nèi)存區(qū)域,而指針是指向一塊內(nèi)存區(qū)域。其地址和容量在生命期里不會改變,只有數(shù)組的內(nèi)容可以改變;而指針卻不同,它指向的內(nèi)存區(qū)域的大小可以隨時改變,而且當(dāng)指針指向常量字符串時,它的內(nèi)容是不可以被修改的,否則在運行時會報錯。
如:


#include
#include
#include
int main(void)
{
  char*s1="123456789";
  char*s2="123456";
  strncpy(s1,s2,6);
  printf("%s %s/n",s1,s2);
  return0;
}


在編譯時不會報錯,但是在運行時會報錯,原因在于企圖改變s1的內(nèi)容,由于s1,s2指向的是常量字符串,其內(nèi)容是不可修改的,因此在運行時不會通過。而下面這個程序是可以運行通過的:

?

?


#include
#include
#include
int main(void)
{
  char s1[10]="123456789";
   char s2[10]="123456";
   strncpy(s1,s2,6);
   printf("%s %s/n",s1,s2);
   return0;
}


在VC++ 6.0上可以編譯運行通過,原因在于數(shù)組的內(nèi)容是可以被修改的,這就充分體現(xiàn)了指針和數(shù)組的區(qū)別,并不是完全等價的。
2.計算內(nèi)存容量的區(qū)別。
用運算符sizeof可以計算出數(shù)組的容量(字節(jié)數(shù)),而用sizeof卻無法計算指針?biāo)竷?nèi)存的容量,用sizeof(p)得到的結(jié)果永遠(yuǎn)是4或者2(即指針變量所占內(nèi)存單元的字節(jié)數(shù),一般情況下指針變量占2個或4個字節(jié)的內(nèi)存單元)。在進(jìn)行參數(shù)傳遞時,數(shù)組會自動退化為同類型的指針。
看下面這段代碼和運行結(jié)果:

?

?


#include
#include
#include
void function(int a[])
{
printf("%d/n",sizeof(a));
}
int main(void)
{
int a[10]={1,2,3,4,5,6,7};
int*p=a;
printf("%d %d/n",sizeof(a),sizeof(p));
function(a);
return0;
}
以上就是關(guān)于在C/C++中,指針和數(shù)組的區(qū)別的全部內(nèi)容,感謝閱讀,更多內(nèi)容請關(guān)注武林技術(shù)頻道網(wǎng)站。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 杂多县| 芜湖县| 闵行区| 乐业县| 珠海市| 乐东| 海安县| 石楼县| 长葛市| 化州市| 乌海市| 宜春市| 资中县| 永靖县| 洛宁县| 达州市| 临潭县| 板桥市| 鄂尔多斯市| 津南区| 锦州市| 广昌县| 金寨县| 霍城县| 青龙| 临沂市| 九龙城区| 大方县| 南昌市| 苍溪县| 唐海县| 南和县| 灌云县| 临江市| 阳曲县| 怀安县| 高淳县| 洞头县| 博罗县| 临夏市| 图们市|