学习笔记二

本文详细介绍了C语言中的一维和二维数组的定义方法,以及指针数组、数组指针、函数指针和函数指针数组的概念。讨论了指针函数和函数指针的区别,包括不同类型指针接收返回值的影响。还提到了函数指针在内存管理中的潜在问题,并给出了函数指针的应用实例。最后,阐述了如何使用size命令查看程序各段的大小。
摘要由CSDN通过智能技术生成

c语言学习笔记二

一维数组的定义方法

arr[N]  = {};
arr[] = {1, 1, 1, 1, 1};
arr[10] = {0};

二维数组的定义方法

arr[][10] = {0};
arr[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
arr[10][3] = {};

指针数组 *p[9]
数组指针 (*p)[n]
指针函数 char * sum(void *)
函数指针 char (*aum)(int )
函数指针数组 char (*sum [10]) (int)
指针函数数组指针 char * (*a)[10] (int)
二维数组指针的移动 arr[3][4] *p = arr 指向二维数组第一个元素的地址
arr 是一个地址常量 arr++ 报错

指针函数与函数指针的区别?

指针函数是一个返回值为指针类型的函数,本质是一个函数,指针函数一定有返回值,而且必须用一个同类型的指针来接收返回值,返回值是一个地址。

  • 如果我要是用一个其他类型的指针来接受返回值,会怎么样?
    如果是类型不同的话,会出现精度的缺失,如果函数返回值指针是int 类型的,但是接收的是char * 类型的,则最大的数不能超过char类型的最大值。
    在gcc编译工具中,char a = 255的printf值是-1;
    而且类型需要兼容,比如char
    类型的不能接受char **类型的返回值。

  • 指针函数应用时的可能错误
    我们说函数运行结束后会销毁所有的局部数据,这个观点并没错,但是,这里所谓的销毁并不是将局部数据所占用的内存全部抹掉,而是程序放弃对它的使用权限,弃之不理,后面的代码可以随意使用这块内存。如果使用及时也能够得到正确的数据,如果有其它函数被调用就会覆盖这块内存,得到的数据就失去了意义。

C语言指针函数

函数指针是指向一个函数的指针,本质是指针。
一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。

//定义函数指针
    int (*pmax)(int, int) = max;  //也可以写作int (*pmax)(int a, int b)

函数指针的定义形式为:

returnType (*pointerName)(param list);

returnType 为函数返回值类型,pointerName 为指针名称,param list 为函数参数列表。参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称,这一点和函数原型非常类似。

注意( )的优先级高于*,第一个括号不能省略,如果写作returnType *pointerName(param list);就成了函数原型,它表明函数的返回值类型为returnType *。

查看程序各个段的大小,使用size命令

size <程序名>

C语言函数指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值