指针问题

指针问题


#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

//        一维数组

        int array[4] = {10, 20, 30, 40};

        int *p1 = array;//指向元素的指针,指向4个字节的空间

        int (*p2)[4] = &array;//指向数组的指针,指向16个字节的空间

//        虽然存储地址一样,但是p1p2代表的含义完全不同

//        可以这样认为

//        array =  &array[0]

//        数组名==首元素的地址==认为是指向首元素的指针

       

        NSLog(@"p1 = %p,p2 =%p",p1,p2);

//            p1 = 0x7fff5fbff760,p2 =0x7fff5fbff760

        NSLog(@"p1 + 1 = %p,p2 + 1= %p",p1+ 1, p2 + 1);

//        p1 + 1 = 0x7fff5fbff764,p2 + 1 =0x7fff5fbff770

       

        NSLog(@"array =%p,&array = %p", array, &array);

//         array = 0x7fff5fbff760,&array =0x7fff5fbff760

        NSLog(@"array + 1 =%p,&array +1 = %p", array + 1, &array +1);

//     array + 1 = 0x7fff5fbff764,&array +1 =0x7fff5fbff770

       

        int *p3 = (int *)(&array + 1);

        NSLog(@"p3 = %p,*p3 =%d",p3,*(p3-1));

//            p3 = 0x7fff5fbff770,*p3 = 40

   

        double *p4 = (double *)(&array + 1);//double决定p4的跨度

        NSLog(@"p4 = %p,p4 - 1 =%p,*p4 = %d",p4, p4-1, *(int *)(p4 - 1));//int决定取数据取多少个字节

//            p4 = 0x7fff5fbff770,p4 - 1 =0x7fff5fbff768,*p4 = 30

       

        char *p5 = (char *)(&array + 1);

        NSLog(@"p5 = %p,p5 - 1 =%p",p5,p5-1);

//            p5 = 0x7fff5fbff770,p5 - 1 =0x7fff5fbff76f

       

//        二维数组

        int a[2][3] = {{10, 20 ,30},{100, 200, 300}};

//        a[0];//a[0][0]的地址,指向a[0][0]元素的地址,指向4个字节的空间

//        a[1];//a[1][0]的地址,指向a[1][0]元素的指针,指向4个字节的空间

//        a;//a[0]的地址,指向a[0]的指针,指向12个字节的空间

//        &a;//a的地址,指向a的指针,指向24个字节的空间

        int (*p6) = (int *)(a + 1);

        NSLog(@"p6 = %p,p6 - 2 =%d",p6, *(p6 - 2));

//             p6 = 0x7fff5fbff74c,p6 - 2 = 20

    }

    return 0;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值