iT邦幫忙

4

C++ 指標 30日(14)

  • 分享至 

  • xImage
  •  

指標就在前方不遠處...


今日主題:指標與陣列

指標代表位址,陣列名稱代表第一個元素位址,指標可以++,但陣列名稱不能++,因為陣列名稱地位相當於字串常數。

請看程式碼:

#include <stdio.h>

main()
{
    int arr[3] = {100,200,300};
    int *ptr = arr;
    int i;
    
    for (i = 0; i < 3; i++){
        printf("&arr[%d] = %p\n", i, &arr[i]);
        printf("arr+%d = %p\n", i, arr+i);
        printf("arr[%d] = %d\n", i , arr[i]);
        printf("*(arr+%d) = %d\n", i, *(arr+i));
    }  
}

結果如下:

&arr[0] = 0x7fffa5403ac0
arr+0 = 0x7fffa5403ac0
arr[0] = 100
*(arr+0) = 100
&arr[1] = 0x7fffa5403ac4
arr+1 = 0x7fffa5403ac4
arr[1] = 200
*(arr+1) = 200
&arr[2] = 0x7fffa5403ac8
arr+2 = 0x7fffa5403ac8
arr[2] = 300
*(arr+2) = 300

鐵人文總整理


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2013-09-29 11:11:01

請教兩點
以上例而言
1.如果取用 arr[3] 會不會出現 index out of bound 的錯誤
2.如果取用 *(arr+3) 是不是不會出現錯誤
疑惑

看更多先前的回應...收起先前的回應...
ted99tw iT邦高手 1 級 ‧ 2013-09-29 11:23:40 檢舉

可能會根據compiler不同而異,若不報錯,則:
arr+3:位址會直接加4
*(arr+3) :結果未定
謝謝

筆記

總裁 iT邦好手 1 級 ‧ 2013-09-29 15:36:24 檢舉

ptr怎麼都沒用到??...疑惑

ted99tw iT邦高手 1 級 ‧ 2013-09-29 15:40:31 檢舉

偷懶被抓包了...臉紅

zuyan iT邦好手 1 級 ‧ 2013-09-29 20:30:55 檢舉

討厭的PTR.....

不要亂指啦....你指到我後面了啦...前面前面才對啦!!

我要留言

立即登入留言