C中對字串和指標的理解

來源:互聯網
上載者:User

最近寫程式的時候一直在用C,這過程中也發現了自己不少問題。

#include <stdio.h>
main()
{
char ch[9];
char *q;
scanf("%s",ch);
q = ch + 2;
q[3] = 'y';
printf("q = %s\n\n",q);
printf("%s\n",ch);
}

在上面的代碼中,如果改變q數組(暫且成為數組)中的某個值,那麼ch中相應的值也會改變。

個人理解:因為q只是一個指標,它指向ch數組中的某個值的地址,系統並沒有給它分配空間,所以改變q中的值也就是改變ch中的值。


#include <stdio.h>
main()
{
char *p = "asdfasdf";
char *q;
q = p + 2;
q[3] = 'y';
printf("q = %s\n\n",q);
printf("p = %s\n",p);
}

在這段代碼中,在試圖改變q值的時候會出現錯誤,調試過程中顯示為“Unhandled   exception   in   ***.exe:   0xC0000005:   Access   Violation"。

我認為是因為p所指向的空間中存放的是常量,不能修改。



不知道理解的對不對,不對的話希望能給我指出來,有詳細解釋的就更好了。嘿嘿……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.