您的位置:首页 > 其它

文章标题

2015-11-22 00:03 267 查看
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]=300,a[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]=400,a[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]=128144,a[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条的特性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class c