原创 c语言复习小记2

2006-12-18 13:28 3358 7 10 分类: MCU/ 嵌入式
 


  今天把指针的内容看完了。感觉c语言的指针真的是博大精深啊!


      字符串指针在处理多个字符串的时候是非常方便的,例如有多个字符串需要处理的时候,那么可以设置一个字符指针数组,这个数据里面的每一个元素是一个指向字符串的指针,因此,通过这个字符指针数组,就可以实现对多个字符串的处理。字符串的指针实质上是字符串的首地址。同样字符串指针也可以作为函数的形参和实参,这样一来,如果和字符数组名做为函数的参数的情况加以组合的话,就有4种情况,可以根据不同的情况加以选用。字符串另外的一个作用就是用在命令行参数,这要从main函数的参数说起,因为main函数有两个参数,一个为命令行参数的个数argc,另外一个是命令行参数的指针(实质上是指针数组)。考虑如下的main函数形式:


       main(int argc, char *argv[])


       {


        ......


        }


        对于上述的main函数,函数执行的时候需要输入参数,这些参数一般有输入设备输入,第一个参数就是可执行程序的名字,接下来是函数需要的参数,这些参数就存放在argv[]中字符指针所指向的地址里面。


       还有一个内容就是指向指针的指针,说起来比较绕口。先来看一下指向指针的指针的定义形式:


       int **p;      //它的意思就是说p是一个指针,这个指针所指向的是一个指向整形变量的指针,好绕口啊,不过理解起来到不是很难。


       使用指针的时候一定要牢记,指针当前所指向的是那里,否则是很危险的,另外也不要定义太多的指针,否则指针满天飞,也容易出错。


       下面主要把对结构体的复习总结一下:


        对于数据类型,像int,double等我们都称为简单的数据类型,而有时,我们需要将一些简单的数据类型结合起来使用,这就产生了结构体数据类型,也就是说结构体数据类型是用户自己根据需要定义的。看一个例子


        struct book


        {


         char name[100];


          int page;


          float price;


                 };


上面的语句便是定义了一个结构体数据类型,在定义了这个类型之后,就可以用它来定义结构体类型的变量或者数据,例如:


        struct book  book1,book2,book[10];


虽然结构体类型的变量还有其他定义的方式,但是上面介绍的先定义结构体数据类型,在定义结构体变量是比较好的一种方式。可以把结构体数据类型的定义放在一个头文件里,这样我们就可以像定义简单数据类型变量那样定义结构体数据类型的变量了。


        同样,定义了结构体数据类型以后,我们也可以定义它的指针,使用上面的定义,我们定义如下指针


         struct book *p;


          p = &book1;


这个时候,p的值就是结构体变量book1的首地址,这个时候用p来引用变量book1中的成员是很方便的,比如p->price,当然也可以用book.price。一般来讲,不能对结构体变量直接引用,而只能引用其中的成员,并且其中的成员的地位和普通变量的一样。另外还有一点需要注意的是,结构体里面还可以包含结构体,这在应用有时是方便的。

欢迎访问skycanny的笔记(副站)
PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1284796 2007-10-7 20:49

编译器不是很好,不过平衡一下就好了

用户48273 2006-12-30 12:41

说真的我到现在还有点头痛

用户1295985 2006-12-28 19:55

相当同意,指针是C的精神也不为过.

用户1024054 2006-12-19 11:48

同感!当时看指针的时候几乎是 看了两个月啊!

其他所有的还没看这么长时间。

相关推荐阅读
用户60452 2008-11-14 20:53
原创java连载--泛型(7)
类型擦除(Type Erasure)       当我们实例化一个泛型的时候,编译器使用一种叫做类型擦除(type erasure)的技术。在类型擦除的过程中,编译器会去除掉 类与接口中所有和类型参数...
用户60452 2008-11-13 22:08
原创java连载--泛型(6)
通配符       在泛型中,我们可以用一个通配符”?”来代替一个未知的类型。例如,使用下面的代码为某种animal指定一个cage:Cage<? extends Animal> some...
用户60452 2008-11-12 20:59
原创java连载--泛型(5)
泛型的子类型       只要两种类型能够相符,我们可以把一种类型的对象赋给另外一种类型的对象。例如,可以把一个Integer赋给一个Object,因为Object是Integer的父类之一。    ...
用户60452 2008-11-10 22:20
原创java连载--泛型(4)
受限的类型参数(Bounded Type Parameters)       有时候,我们要限制传递给类型参数的具体参数。例如,对数进行操作的方法就只能接受Number或者其子类的对象作为改方法的参数...
用户60452 2008-11-09 21:49
原创java连载--泛型(3)
泛型方法和构造器       如果在申明方法或者构造器的时候使用类型参数的话,就可以定义泛型方法和泛型构造器。这和定义一个普通的泛型基本上无二样,除了类型参数的作用范围只是在定义它的方法或者构造器之中...
用户60452 2008-11-08 19:13
原创java连载--泛型(2)
我们可以通过将"public class Box" 修改为 "public class Box<T>"而定义一个泛型,在这个定义中,使用了一个类型变量(type variable) T,而...
EE直播间
更多
我要评论
3
7
关闭 站长推荐上一条 /3 下一条