黑马程序员 学习日记(二)-指针、函数

来源:互联网 发布:java 之父 编辑:程序博客网 时间:2024/06/02 01:28

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

一、指针

1.指针是什么?

地址指向某个变量单元。我们将地址形象化的称为指针。

2.指针变量

一个变量中存储了指向另一个变量的地址,这个变量叫作指针变量。

例如:int *p;p=&i; p是个指针变量,之所以叫指针变量,其实只是p变量中存放特殊的内容(即变量i的地址)。我们用int *p;来声明p是个指针变量。

3.指针与数组名

数组名其实是指向数组首地址的指针常量。你可以通过int *p; int a[] = {1,2,3};p=a;来将数组首地址赋值到指针。并可以通过*p;*(p+n)来访问数组中的元素。

4.指针常量与常量指针

int *const p=a;声明指针常量。p里面存储的内容,即p的值是不能修改的。const int *p = a;声明常量指针。p的值可以修改。但不能通过*p去修改a的值。

5.指针与函数指针

函数名其实是指向函数入口的指针常量。我们可以通过void (*Fun)(int)来声明一个无返回值 ,具有一个整型参数的函数指针

void a(){}; void (*p)() ;p=&a;或者p=a;都可以通过*p();p();来调用a函数。

1)其实,a的函数名与p函数指针都是一样的,即都是函数指针。a数名是一个函数指针常量,而p是一个函数数指针变量,这是它们的关系。

2)但函数名调用如果都得如(*a)()这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许a()这种形式地调用。

3)为统一起见,p函数指针变量也可以p()的形式来调用。

4)赋值时,即可p = &a形式,也可p = a。


很值得注意的是指针数组和数组指针

指针数组用 int *p[];来定义。表示一个数组每个数组元素都是一个指针。

数组指针用 int (*p)[];来定义。表示一个指针指向一个元素个数为n的数组

指针数组这种定义方式其实只是定义了一个指针变量p。变量p指向了一个元素个数为n的数组。p是指向数组的 所以P的跨度是以数组为基本单位的。比如p+1 +1表示一个数组但闻是在地址上增加了数组的总长度 例如int (*p)[5]  p+1表示在地址上增加了20

可以参照char *p和int *p 的区别来区分。p在32位上都是占了4个字节。但是p指向的空间是大小是不一样的。


二、函数

    任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。所以,你可以说C语言程序是由函数构成的

    一般来说,我们会将不同的功能交给不同的函数去实现。为了方便调用和区分这些函数,我们需要为每一个函数都起一个唯一的名称,函数的命名必须按照标识符命名规则

    利用函数名就可以调用到对应的函数。
    任何一个函数在使用之前都必须进行定义,定义函数的目的就是为了写清楚你这个函数是干啥用的,里面包含了哪些代码
    函数的定义格式如下
    函数定义的注意
    1.函数名不能重复
    2.每一个函数都应该独立定义,不能嵌套定义

返回值类型 函数名(参数类型形式参数1,参数类型 形式参数2,…)

{

  函数体

}

基本概念
    形式参数:在定义函数时,函数名后面的小括号()中定义的变量称为形式参数,简称形参
    实际参数:在调用函数时传入的值称为实际参数,简称实参

函数的形参和实参具有以下特点:

1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。

2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。 

4.函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不 会变化

5.和break,continue一样,在return后面不能写语句,因为执行不到。


    返回值就是函数调用完后,返回给函数调用者的结果,用return关键字进行返回
    定义函数时,要指明函数的返回值类型
    一个函数可以没有返回值,如果没有返回值,应该用void表示返回值类型
    如果一个函数没有返回值,最后面的return语句可以省略
    如果一个函数没有明确写出返回值类型,那么代表这个函数的返回值类型是int
return的使用注意
    1.return语句可以在函数内部返回一个值给函数调用者
    2.一个函数内部可以多次使用return语句,使用了return语句后,函数就会马上停止执行,return语句后面的代码就不再被执

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

详细请查看:www.itheima.com

0 0
原创粉丝点击