主題: 指標與陣列
查看單個文章
  #1  
舊 2014-06-20, 10:25 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,017
預設 指標與陣列

據說陣列str[10]的str可以當成指標來用。

#include <stdio.h>
int main(void)
{
int str[4]={10,25,44,63};
int *p;
p=str;

printf("%d\n",p[3]);
printf("%d\n",str[3]);
printf("%d\n",p);
printf("%d\n",*p);
printf("%d\n",str);
printf("%d\n",*str);

return 0;
}

上述的程式跑出來之後,確實str和p得到的結果都是一樣的。

但書上有特別提到,「然而,你無法更改一個陣列名稱產生的指標」例如上例中的str。而「str++」是錯誤的,因為「陣列產生的指標str會被視為常數,它指向陣列的開端。因此,這是無效的修改,編譯器會產生錯誤訊息。」

因此我做了如下的範例:
#include <stdio.h>
int main(void)
{
int str[4]={10,25,44,63};
int *p;
p=str;

str++;
printf("%d",str[1]);


return 0;
}

果然編譯器出現錯誤訊息。

但如果是把 str++ 改成 p++,然後求p[1],則編譯執行正確。

#include <stdio.h>
int main(void)
{
int str[4]={10,25,44,63};
int *p;
p=str;

p++;
printf("%d",p[1]);


return 0;
}

so,能請先進解釋一下嗎?既然str[4]的str可以當指標來用,縱然另外又指定一個指標變數 p,而p=str,二者似乎完全可以互換著用,那為何在str=str+1這一點卻不行,而p=p+1則可以?其中的邏輯在哪裡呢?

thanks
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章