Chinaunix首页 | 论坛 | 博客
  • 博客访问: 370625
  • 博文数量: 100
  • 博客积分: 2500
  • 博客等级: 大尉
  • 技术积分: 1209
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-15 21:24
文章分类

全部博文(100)

文章存档

2011年(100)

分类: C/C++

2011-07-16 09:46:07

1:概述
     在用C的过程中,恐怕最纠结的就是数组与指针的,有时候可以混用,有时候不可以,真头疼。

2:声明与定义
  • 定义:确定对象类型,并分配内存,用于创建新的对象。例: int array[100];
  • 声明:描述对象类型,用于指代其他地方定义的对象。例:extern int array[];
声明必须和定义一致。例:
定义:int m[100];  声明:extern int* m; //Error 数组和指针并不完全相同
定义:int i; 声明:extern float i; //Error 跟上面一个道理

3:左值与右值
  • 左值:能够出现在表达式左边的值,通常代表符号所表示的地址,就是存储结果的地方,编译时可知。
  • 右值:能够出现在表达式右边的值,通常代表符号地址中的内容,就是要存放的东西,运行时才可知。
4:数组的引用方式
      char a[6] = "abcdef";   //假定a的地址是9980
      执行c = a[i];的过程
  •  编译器取得符号表地址9980
  •  取得i的地址,和9980相加
  •  取得相加所得结果地址的内容赋值给c
5:指针的引用方式
     char *p ;   //假定p的地址是4624
     执行c = *p;的过程
  • 编译器取得符号表的地址4624
  • 取得4624地址的内容,假设是5081
  • 取得5081地址里面的内容赋值给c
可见数组和指针的引用方式还是存在不同的,指针多里一层间接引用,所以当定义成数组却声明成指针时,将会
安装声明的方式去寻址,请不要报侥幸心理,有时候得到了想要的东西,不过总有一天你会因为这个吃大亏的。

6:数组与指针的区别
      指针:
  • 保存数据的地址
  • 间接访问数据
  • 通常用于动态数据结构
  • 内存管理malloc 和 free 族
  • 通常指向匿名数据
      数组:
  • 保存数据
  • 直接访问数据
  • 通常用于存储固定数目而且数据类型相同的元素
  • 隐式的分配内存
  • 自身就为数据名
数组和指针都可以在定义时用字符串常量进行初始化,但是指针却不为指向的对象分配空间,只为自身分配空间。
当定义的同时用字符串常量进行初始化,但是只有字符串常量才是这样,这就意味着只读。
阅读(1994) | 评论(0) | 转发(1) |
0

上一篇:重温C语言::1::(6)怪怪的声明

下一篇:没有了

给主人留下些什么吧!~~