文章标题
来源:互联网 发布:叶玉如 知乎 编辑:程序博客网 时间: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]=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条的特性
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- Ry’s Objective-C Tutorial---Protocols
- Gnome Tetravex
- rman备份还原oracle db
- java第三天
- Ry’s Objective-C Tutorial---Categories
- 文章标题
- 探索设计模式之六——单例模式
- Ry’s Objective-C Tutorial---Blocks
- 数据存储
- Ry’s Objective-C Tutorial---Exceptions & Errors
- EasyUI常用控件的禁用方法
- 使用git管理puppet运行环境与配置版本
- 浅谈对象和过程
- 数据库之SQL基本语法