一.数组和指针的差别二.函数的好处以及使用函数的注意项。三.用c语言如何实现面向对象?c语言哪些点体现了面向对象。

一.数组和指针的差别:

1.空间分配:数组是静态分配,指针是动态分配。

2.访问效率:数组是直接访问,效率高一点。指针是间接访问,效率低一点。

3.安全性:数组会造成数组越界,内存会造成内存泄漏。

4.函数形参:数组的形参会转换为指针。

指针的用法偏向于计算机地址的处理,数组分配空间,是连续分配空间。

 

 

二.函数的好处以及使用函数的注意项。

1.提高代码的复用性。

2.提高代码的维护性。

3.迭代开发,可扩展开发。

 

①函数名:(自助解释性,即可读性)

举例:delete_ch_count_min最多不能超过5

动词+名词

get_userinsert_user

函数名也是一个指针常量,保存的是函数存放的地址(函数的入口地址)

 

②函数调用

1.通过函数名找到函数的入口地址

2.给形参分配内存空间

3.传值:把实参变量对应空间的值传给形参

4.执行函数体里的语句

5.函数返回并释放内存空间


 

 

读(不修改)实参变量对应的内存空间的值时,传实参变量名。

写(修改)实参变量对应内存空间的值时,传实参变量的地址。

 

 

  1#include<stdio.h>

  2 char *func(int *num)

  3 {

  4     int count = 5;

  5     char *src = "hello world";

  6     *num = 5;

  7     return src;

  8 }

  9 int main()

 10 {

 11     int num;

 12     char src[100] = "hello";

 13     char *ptr = func(&num);

 14     printf("ptr = %s\n",ptr);

 15     printf("num = %d\n",num);

 16     return 0;

 17 }

传出函数:num是一个空的值

传入函数

sleep5)代表延迟5秒后打印。

exit1)结束整个程序,头文件为#include<stdlib.h>

echo $?当前结束程序的返回值。

 

返回局部变量的地址很危险,容易被释放。

return 不能返回局部变量的地址。

 

调用函数要对返回值作出判断。

要进行入口参数检查,最好不要依赖于别人已经实现的函数。

ifsrc==NULL ||dest==NULL

     return NULL

 }

 

 

int*p_func)(intint

其中p_func = add;为入口地址

P_func=&add;为整个数组的地址

 

                                    

回调函数:回调函数是一个通过函数指针调用的函数,如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。

 

 

三.用c语言如何实现面向对象?c语言哪些点体现了面向对象。   

封装: 所谓封装,通俗地说,就是一个姑娘化了妆,只给你看她想让你看的那一面,至于里面是否刮了骨、垫了东西,不给你看。说到封装就得说隐藏,这是对兄弟概念;其实我理解隐藏是更深的封装,完全不给你看见,而封装可能是犹抱琵琶半遮面。封装在 C++ 语言中有 protected private 关键字在语言层面上支持,而 C 语言中没有这些。 C 有结构体( struct ),其实可以实现封装和隐藏。为了更好的隐藏一个类的具体实现,一般是一个公开头文件、一个私有头文件,私有头文件中定义实现的内部细节,公开头文件中定义开放给客户程序员的接口和公共数据。

继承:什么是继承?在面向对象层面上不讲了,只说语法层面。语法层面上讲,继承就是派生类拥有父类的数据、方法,又添了点自己的东西,所谓子承父业,发扬光大。在 C 语言中可以用结构体的包含来实现继承关系。

多态:

1.基类中显式声明一个 void** 成员,作为数组保存基类定义的所有函数指针,同时声明一个 int 类型的成员,指明 void* 数组的长度。

2.基类定义的每个函数指针在数组中的位置、顺序是固定的,这是约定,必须的

3.每个派生类都必须填充基类的函数指针数组(可能要动态增长),没有重写虚函数时,对应位置置 0

4.基类的函数实现中,遍历函数指针数组,找到继承层次中的最后一个非 0 的函数指针,就是实际应该调用的和对象相对应的函数实现

 

四.函数的数组指针

int*func_array[3])(intint);

func_array[0]=add

func_array[1]=sub

func_array[2]=mul

int i

fori=0i<3i++

{

    func_array[i]num1num2);

}

函数的可变参数:

1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变 
量是指向参数的指针
2)然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第 
一个可变参数的前一个参数,是一个固定的参数
3)然后用va_arg返回可变的参数,并赋值给整数j. va_arg的第二个 
参数是你要返回的参数的类型,这里是int
4)最后用va_end宏结束可变参数的获取.然后你就可以在函数里使 
用第二个参数了.如果函数有多个可变参数的,依次调用va_arg 
取各个参数

 

 

int mainint argcchar *argv[]

argc指个数,真正的参数从argv[1]开始,argv[]里面存的是形参的个数

 

五.如何给c语言写注释

举例1.int flag = 1//正负标识位

     2.int result = 0//保存最终结果

     3.result = result * 10*src - 0’)//eg1-0=1; 1*100+2*10+3*1=123;

//行级注释

/**/块级注释

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值