文章标题

来源:互联网 发布:叶玉如 知乎 编辑:程序博客网 时间:2024/06/03 19:42

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
原创粉丝点击