C语言修行之基础篇 (七) 指针与函数知识点

本文详细介绍了C语言中函数参数的传递方式,包括普通变量、数组和指针作为参数的机制。重点讲解了传值与传址的区别,通过swap函数例子说明。还探讨了const指针在函数参数中的使用,以及如何判断输入型和输出型参数。最后,讨论了函数参数中const指针的作用,确保函数内部不修改指针内容。
摘要由CSDN通过智能技术生成


指针与函数传参

普通变量作为函数形参

1、函数传参时,普通变量作为参数时,形参和实参名字可以相同也可以不同,实际上就是实参来替代对应的形参的。
2、在子函数内部,形参的值等于实参。原因是函数调用时实参的值赋值给形参 —— 传值调用

数组作为函数形参

1、数组名作为形参传参时,实际传递的不是整个数组,而是数组的首元素的首地址。(也就是整个数组的首地址)所以在子函数内部,传进来的数组名等于是一个指向数组首地址的指针
2、在子函数内传参得到的数组首元素首地址,和外面得到的数组首元素首地址的值是相同的。

指针作为函数形参

和数组作为函数参数是一样的
结构体变量作为函数形参
1、和普通变量是一样的。
2、因为结构体一般都是很大,所以如果直接用结构体变量进行传参,那么函数调用效率就会很低。解决方案:不要传变量,传变量的指针地址进去。

传值和传址调用(经典例子swap函数)

在C语言中没有传值和传址两种方式,C语言本身函数调用时一直都是传值的,只不过传的值可以是变量名,也可以是变量的指针。

输入型参数与输出型参数

1、函数名是一个符号,表示整个函数代码段的首地址,实质是一个指针常量,所以在程序中使用到函数名都是当地址用的,用来调用函数的。
2、函数体是函数的关键,由一对{ }括起来,包括很多句代码,函数体就是函数实际做的工作。
3、形参列表和返回值。形参是函数的输入部分,返回值是函数的输出部分。
4、没有参数列表和返回值,函数也能用。参数可以用全局变量。

函数传参中使用const指针

const一般用在函数中,用法是const int *p;
const用来修饰指针做函数传参,作用就在于声明在函数内部不会改变这个指针所指向的内容,所以给该函数传一个不可改变的指针(char *p = “linux”)不会触发错误,而一个未声明为const的指针的函数,你给他传一个不可更改指针的时候就要小心出现错误

void func_1(char *p)
{
    *p = 'a';
}
void main(void)
{
    char *a = "linux";            // 出现段错误,原因是:这个字符串存在于代码段不能改变的
    char a[] = "linux";           // 可以运行,结果为“aiunx”
    func_1(a);
    
    return 0;
}

一般来说输入的参数为输入参数,输出的参数为输出参数。函数的参数可以有很多个,而返回值只有一个。如果函数要返回很多值要怎么办呢?
编程中函数的输入和输出都是靠函数参数,返回值只是用来表示函数执行的结果是成功还是失败
如果这个参数是用来做输入的,就叫输入参数;如果这个参数的目的是输出的,就叫输出参数。
输出参数就是用来让函数内部把数据输出到函数外部的

看到一个函数的原型后,怎么样一眼看出来哪个参数做输入哪个做输出?
函数传参如果的是普通变量那肯定是输入型参数;
如果传指针就有两种可能:
如果这个参数是做输入的(通常做输入的在函数内部只需要读取这个参数而不会需要更改它)就在指针前面加上const来修饰
如果函数形参是指针变量并且还没加const,那么表示这个参数是用来做输出型参数的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bazinga bingo

您的鼓励就是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值