文章标题

pointers.c的代码以及实现功能如下:

#include<stdio.h>
#include<stdlib.h>
void f(void) {
    int a[4];
    int*b = new int[16];//(int*)malloc(16);//分配长度为16bytes字节的内存块
    int*c=0;int i;
    printf("1:a=%p,b=%p,c=%p\n", a, b, c);//分配的空间是随机的,输出地址就是随机的地址
    for (i = 0; i<4; i++)//for循环只循环后面的一句
        a[i] = 100 +i;
    //a[0]=100,a[1]=101,a[2]=102,a[3]=103
    c = a;
    //数组名代表数组的首地址,因此c=&a[0]等同于c=a(&为取地址)
    c[0]=200;//c[0]=a[0]=200
    printf("2:a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d\n", a[0], a[1], a[2], a[3]);
    //a[0]=200,a[1]=101,a[2]=102,a[3]=103
    c[1] = 300;//a[1]=300
    *(c + 2) = 301;//*(c+2)等同于c[2]=301所以a[2]=301
    3[c] = 302;//等同于c[3]?
    printf("3:a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d\n", a[0], a[1], a[2], a[3]);
    //a[0]=200,a[1]=300a[2]=301,a[3]=302
    c = c + 1;//C+1的地址给了C(C和C+1在一个地址)
    *c = 400;//此时C地址上的值为C+1地址上的值
             //该代码意思是将400赋给C+1地址上的值,故c[1]=400=a[1]
    printf("4:a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d\n", a[0], a[1], a[2], a[3]);
    //a[0]=100,a[1]=400a[2]=301,a[3]=302
    c = (int*)((char*)c + 1);//强制类型转换
    *c = 500;
    printf("5:a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d\n",a[0], a[1], a[2], a[3]);
//a[0]=200,a[1]=128144a[2]=256,a[3]=302
        b = (int*)a + 1;
    c = (int*)((char*)a + 1);
    printf("6:a=%p,b=%p,c=%p\n", a, b, c);
    //a,b=a+4,c=a+1
}
int main(int *ac, char**av) {
    f();
    return 0;
}

注意第5条的特性

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值