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

來源:互聯網
上載者:User

標籤:void   print   儲存   int   例子   堆棧   nbsp   字元型   不同   

在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“的首地址。

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.