文章标题
2015-11-22 00:03
267 查看
pointers.c的代码以及实现功能如下:
注意第5条的特性
#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条的特性
相关文章推荐
- Android Native 绘图方法
- Linux C函数参考手册(PDF版)
- C#中struct和class的区别详解
- Lua教程(十七):C API简介
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- C#实现打造气泡屏幕保护效果
- 使用C#代码获取存储过程返回值
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结
- C语言中static的作用及C语言中使用静态函数有何好处
- 字典树的基本知识及使用C语言的相关实现
- 详解C语言中free()函数与getpagesize()函数的使用