第九天————传参问题和函数指针,指针函数

(1)一维数组的传参:
void func(char *pStr);
void func(char pStr[]);

注意:数组作为参数传参时,会被退化成一个指针来使用。


(2)二维数组的传参:

void func(int M,int N,char (*pStr)[N]);
void func(int M,int N,char pStr[][N]);


(3)main函数传参:

#include <stdio.h>
2
3 int main(int argc,const char argv[])
4 {
5 int i;
6 printf(“参数为以下:\n”);
7 for(i=0;i<argc;i++)
8 {
9 //puts(argv[i]);
10 printf(“argv[%d] =”,i);
11 puts(
(argv+i));
12 }
13 return 0;
14 }
运行结果如下:
linux@ubuntu:~/21051_C/day9$ ./a.out wangjia haha xixi lll
参数为以下:
argv[0] =./a.out
argv[1] =wangjia
argv[2] =haha
argv[3] =xixi
argv[4] =lll


(4)函数指针:指向函数的指针、
4-1:函数指针的定义:
格式:
返回值类型 (*指针变量名) (形参类型1,形参类型2。。。)

如果要去使用高函数指针:
则:指针变量名 = 地址;
    指针变量名 = 函数名(&函数名)

函数: 存在于内存中的一段二进制代码(本质)

数组名:代表函数的入口地址

4-2:函数指针的声明
关键字:
typedef:作用:给一个已经存在的数据类型取一个别名

分析函数指针的类型:
eg:
int (pFunc)(int,int);
pFunc的类型?
----》去掉变量名,剩余的均是该指针的类型
int (
)(int,int) ---->该pFunc自己的类型

问题:能够给该类型取一个别名?—》typedef 可以做到

eg:
typedef int (*)(int,int) MFunc ; (不会识别)
typedef int (MFunc)(int,int); (相当于给int ()(int,int)取一个别名叫MFunc)

4-3:回调函数:
概念:将一个函数名作为参数传递给另外一个函数,在另外一个函数中通过该函数指针完成对该函数的调用即为回调函数
(通过函数指针调用的函数)

4-4:函数指针数组:
格式:
回顾定义数组?
----》数据类型 数组名[元素个数];

格式: 
     格式1:返回值类型  (*数组名[元素个数]) (形参类型1,形参类型2。。。))
	 格式2:函数指针类型别名  数组名[元素个数];

(5)指针函数:
概念: 函数返回值类型是指针类型的函数

堆区:程序员手动管理的一片区域(管理:申请和释放)
对于申请和释放:通过系统提供的接口函数来实现
申请:malloc
释放:free

分析函数三步走:
功能,参数,返回值

头文件:
#include <stdlib.h>
函数原型:
void *malloc(size_t size);
功能:用来在堆区动态申请一片内存空间
参数:代表需要申请的空间的字节数
返回值:代表是一个万能指针,需要程序员强制类型转换方可使用。
成功:返回值代表那片空间的首地址
失败:NULL代表失败
void free(void *ptr);
功能:用来释放一片连续的空间
参数:空间首地址

   void *realloc(void *ptr, size_t size);
   功能:用来给一片空间进行扩容
   参数: 
        参数1:需要扩容的空间的首地址
		参数2:所需扩容的总字节个数(旧+新)
   返回值:扩容成功之后的空间首地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值