2021-4-19 指针的运算

#include<stdio.h>

int main(void) {
    int urn[5] = { 100, 200, 300, 400, 500 };
    int * ptr1, * ptr2, * ptr3;
    
    ptr1 = urn;
    ptr2 = &urn[2];
    
    printf("urn[5] = { 100, 200, 300, 400, 500 },\nptr1 = urn,\nptr2 = &urn[2]\n\n");
    printf("The size of urn is %zd bytes\n\n", sizeof urn);
    
    printf("pointer value,      dereferenced pointer,      pointer address:\n");
    printf("ptr1 = %p,       *ptr1 = %d,         &ptr1 = %p\n\n", ptr1, *ptr1, &ptr1);
    
    printf("指针加法 ptr3 = ptr1+4:\n");
    ptr3=ptr1+4;
    printf("ptr1+4 = %p(内存urn[1]的机器地址往后挪了4个单元=增加了16个字节,转换为十六进制,地址加10(0x)), *(ptr1+4) = %d\n", ptr1+4, *(ptr1+4));
    printf("  ptr3 = %p, *ptr3 = %d\n\n", ptr3, *ptr3);
    
    printf("递增指针ptr1++:增加一个储存单元,4个字节\n");
    ptr1++;//递增指针
    printf("ptr1 = %p, *ptr1 = %d, &ptr1 = %p\n\n", ptr1, *ptr1, &ptr1);
    
    printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n", ptr2, *ptr2, &ptr2);
    printf("递减指针ptr2--:\n");
    ptr2--;
    printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n\n", ptr2, *ptr2, &ptr2);
    
    printf("恢复初始值--ptr1;++ptr2;:\n");
    --ptr1;
    ++ptr2;
    printf("ptr1 = %p, ptr2 = %p\n\n", ptr1, ptr2);
    
    printf("用一个指针减去另一个指针,必须是同一数组内的指针\n");
    printf("ptr2 = %p, ptr1 = %p, ptr2-ptr1 = %td(相隔2个数组元素的类型int,不是字节)\n\n",ptr2, ptr1, ptr2-ptr1);
    
    printf("用一个指针减去一个整数\n");
    printf("ptr3 = %p, ptr3-2 = %p\n",ptr3, ptr3-2);
    printf("*ptr3 = %d, *(ptr3-2) = %d\n",*ptr3, *(ptr3-2));
    
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值