C語言中使用指針與數組的區別


在c語言中,指針和數組名都表示地址,但兩者卻有很大的不同之處,對於初學者來說一定要弄清楚兩者的區別。

首先,我舉個簡單的例子:

char *p1="hello!";  //定義字符型指針p1,並將指針p1指向字符串“hello!”的首地址。

char s[10]="hello!";  //定義數組s,並將其初始化賦值。

然而,如果char s[10]; s="hello!";這樣就會報錯,為什么呢?原因很簡單,因為數組名是常量。

言歸正傳,我現在舉兩個簡單的例子:

例子1

void main()

{

char p[]="abcdef";

p[0]='Y';

printf("%s",p);

}

在本段程序中輸出Ybcdef

例子2

void main()

{

char *p="abcdef";

p[0]='Y';

printf("%s",p);

}

本段程序卻拋出異常,為什么?

在例子2中,char *p="abcdef",指針p是存儲在堆棧區,但字符串是常量,存儲在常量區,只是指針p指向了存儲在常量區的字符串首地址,此時不能改變常量區的字符串的值。

在例子1中,char p[]="abcdef",此處的賦值是將常量區的字符串“abcdef”拷貝到了堆棧區的數組p的空間了。數組p是在堆棧區開辟了空間,此時是可以修改字符串的值,因為修改的是堆棧區的字符串的值。另外此時的數組名p是堆棧區中的”abcdef“的首地址。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM