在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指向了存盤在常量區的字串首地址,此時不能改變常量區的字串的值,
如果你也想成為程式員,想要快速掌握編程,趕緊關注小編加入學習企鵝圈子吧!
里面有資深專業軟體開發工程師,在線解答你的所有疑惑~編程語言入門“so easy”
資料包含:編程入門、游戲編程、課程設計等,
免費學習書籍:

免費學習資料:

在例子1中,char p[]="abcdef",此處的賦值是將常量區的字串“abcdef”拷貝到了堆疊區的陣列p的空間了,陣列p是在堆疊區開辟了空間,此時是可以修改字串的值,因為修改的是堆疊區的字串的值,另外此時的陣列名p是堆疊區中的”abcdef“的首地址,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251347.html
標籤:C
上一篇:STL_deque容器
