国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 邻水| 高安市| 万安县| 通河县| 阳东县| 庆云县| 婺源县| 江安县| 山东| 罗源县| 綦江县| 崇文区| 和顺县| 龙山县| 毕节市| 白水县| 陵水| 平安县| 南丰县| 黄浦区| 金华市| 沈阳市| 兴安盟| 两当县| 延津县| 贵德县| 宁津县| 娄底市| 武穴市| 上林县| 景泰县| 眉山市| 驻马店市| 招远市| 麻城市| 广安市| 容城县| 呼玛县| 衡阳县| 德兴市| 灌云县|