Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416285
  • 博文数量: 38
  • 博客积分: 2513
  • 博客等级: 少校
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-22 13:35
文章分类

全部博文(38)

文章存档

2010年(4)

2009年(6)

2008年(28)

我的朋友

分类: C/C++

2008-05-13 13:10:57

C可以说是一门非常重要的功课了,看似非常简单,其实又博大精深,到现在为止我也有些知识点不是很清楚,继续学习中。本文就C语言中的指针、数组、函数相关的知识做个总结。
 
1 数组
         数组是具有相同数据类型的有序集合,并且用唯一的名字来标识,其元素可以通过下标来引用,因此,可以方便地将数组用于循环,从而降低程序的复杂性。数组可以是一维的或多维的,所有的元素占据连续的存储单元,首地址对应第一个元素的存储地址。
         一维数组的一般定义方式是:类型符     数组名[元素个数] ;
         “类型符“说明该数组元素的数据类型
         “数组名”为一合法的标记符
         “元素个数”为数组长度,可以是整形常量表达式,但不能含有变量
         如:char data[10];
          牢牢记住这个定义格式吧!
         二维数组的一般定义方式是:类型符     数组名[num1][num2];
         一维数组明白后,二维多维数组都可以归结到一维数组,如下示:
         类型符     数组名[num1][num2] ;
                     \                               /
                      \                          /
                       \                     /
                        \                /
                          类型符A      数组名[num1]
         是不是二维变一维了?实际上二维数组是一种特殊的一维数组罢了,只不过两者的数组元素类型不同罢了。
 
2 指针
         通常,一个内存地址在C中更习惯于被称为指针,并且说是“指向”某一变量或内存中的某一位置。
         指针可以说就是地址,存储地址需要专门的变量,就是指针变量。
         指针的一般定义方式是:类型符     *变量名;
         牢牢记住这个定义形式吧!
         “类型符”是指针变量所指向的数据的类型
         *”是一个标识符,说明该变量是一个具有指针类型的变量
         说到指针必然离不开两个运算符&*,在此不再赘述,看下示例。
         Int x=5,y=6,*p;
         P = &x;
         (*p) = 3;
         下列情形是万万不允许的
         int *p;  p=200;
         int *p;  *p=200;
         通常的指针初始化如下
         Char *p = (char*)0xb0000000;
         Char *p = “hello”;
         Int x=3, *p;
         P = &x;
 
3 函数
         函数就是完成特定功能的相对独立的代码段,它具有输入输出参数,其定义形式如下:
         类型符     函数名(型参列表)
         {
                   /* 函数代码 */
         }
         也牢牢记住这个定义形式吧,因为这些都是最最基本的。
 
4 关联
让我们通过一些例子说明上述三者之间的交叉关系吧。
4.1 int dat[10], *p;
        p=a; p=&a[0];
   这里p完成了对一维数组dat的指针操作
   也可以说pdat的第二个名字
4.2 int (*p)[5];
   这里p是什么啊?p是指向数组类型的指针变量。
   对于这样有点眼花的东东,一个识别真伪的方法就是
        (1)牢记指针、数组、函数定义的原型
        (2)以名字为中心
        (3) []()具有相同的优先级,且高于*
 
   下面就让我们看看这个p
   以名字为中心先看p,这里是*p,并且有()括起来,回忆指针定义的原型就知道了,p是个指针,它指向的数据类型是什么?是一个数组int [5]
让我们把它打回原型看看
int (*p)[5];
     |
A *p; 这里A就是int [5] 
 
int x[5];
  |
A x; 这里A就是int [5]了
 
int x;
这是最基本的定义格式,所有的复杂最终都会回归到这个原始。
4.3 int *p[5];
   这个p是什么啊?p是指针数组。
   按照上述方法分析
        []优先级高,一看[],再回忆数组的定义原型就知道了,p是个数组,数组的基类型是什么?是int *啊,所以p是一个基类型为指向int类型指针的数组,即指针数组。
4.4 int *p( );
   这个p是什么啊?p是函数。
   ()优先级高,一看(),再回忆函数定义的原型就知道了,p是函数,函数的返回类型是int *罢了。
4.5 int (*p)( );
   这个p是什么啊?p是指向函数的指针。
   以名字为中心,先看(*p)p是指针,再看(),是函数,即为指向函数的指针。
打回原型int (*p)( );
                       |
                  A *p;  这里A就是int ()
 
5 总结
         数组、指针、函数是C中最基本的东西,只要抓住它们的本质,再怎么变化都会一目了然。
 
阅读(1516) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:Const用法小结

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

chinaunix网友2011-01-08 14:47:06

写得不错!我基本上也是采用这种理解方式。