iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
自我挑戰組

少年DevOps的C++奇怪漂流系列 第 19

Day19-多重指標

  • 分享至 

  • xImage
  •  

繼續講*指標,指標不是只能有一個還能繼續層層指下去

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int p = 10;
    int *ptr = &p;
    int **ptr2 = &ptr;
    int ***ptr3 = &ptr2;

    printf("取得p的記憶體位置: %p\n", &p);
    printf("取得p值: %d\n", p);

    printf("*ptr取得到的p值: %d\n", *ptr);
    printf("ptr指向的記憶體位址: %p\n", ptr);
    printf("取得ptr自身的記憶體位址: %p\n\n\n", &ptr);
 
    printf("**ptr2取得到的p值:%d\n", **ptr2);
    printf("*ptr2指向p記憶體位置:%p\n", *ptr2);
    printf("ptr2指向ptr1的記憶體位置:%p\n", ptr2);
    printf("取得ptr2記憶體位址:%p\n\n\n", &ptr2);

    printf("***ptr3取得到p的值:%d\n", ***ptr3);
    printf("**ptr3指向p記憶體位置:%p\n", **ptr3);
    printf("*ptr3指向ptr1的記憶體位置:%p\n", *ptr3);
    printf("ptr3指向ptr2的記憶體位置:%p\n", ptr3);
    printf("取得ptr3記憶體位址:%p\n", &ptr3);
    return 1;
}
// result
取得p的記憶體位置: 0x7fffffffdb0c
取得p值: 10

*ptr取得到的p值: 10
ptr指向的記憶體位址: 0x7fffffffdb0c
取得ptr自身的記憶體位址: 0x7fffffffdb10

**ptr2取得到的p值:10
*ptr2指向p記憶體位置:0x7fffffffdb0c
ptr2指向ptr1的記憶體位置:0x7fffffffdb10
取得ptr2記憶體位址:0x7fffffffdb18

***ptr3取得到p的值:10
**ptr3指向p記憶體位置:0x7fffffffdb0c
*ptr3指向ptr1的記憶體位置:0x7fffffffdb10
ptr3指向ptr2的記憶體位置:0x7fffffffdb18
取得ptr3記憶體位址:0x7fffffffdb20

上面一串三重指標看似超深澳,但轉化成下面這張圖就很好理解了,好像越解釋越複雜了,算了XD

https://ithelp.ithome.com.tw/upload/images/20211001/20098886gpvJbgHZfZ.png


上一篇
Day18
下一篇
Day20
系列文
少年DevOps的C++奇怪漂流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言