大家好,欢迎来到IT知识分享网。
指针才是C的精髓
3.10.输入型参数与输出型参数
3.10.1、函数为什么需要形参与返回值
#include<stdio.h> int x = 0; //被乘5的变量,也就是输入函数的变量 int y = 0; //输出结果的变量 int multip5(int a); void multip5_2(void); int main(void) {
//程序要完成的功能是:对一个数乘以5 //方法1:函数传参 int a = 3; int b = 0; b = multip5(a); printf("b = %d\n", b); //方法2:用全局变量来传参 x = 2; multip5_2(); printf("y = %d\n", y); return 0; } int multip5(int a) {
return a * 5; } void multip5_2(void) {
y = 5 * x; }
(5)全局变量传参最大的好处就是省略了函数传参的开销,所以效率要高一些;但是实战中用的最多的还是传参,如果参数很多传参开销非常大,通常的做法是把很多参数打包成一个结构体,然后传结构体变量指针进去。
3.10.2、函数传参中使用const指针
(1)const一般用在函数参数列表中,用法是const int *p;(意义是指针变量p本身可变的,而p所指向的变量是不可变的)。
#include <stdio.h> void func1(int *p) {
*p = 5; } void func2(const int *p) //p指向的变量不可改变 {
//*p = 5; //error: assignment of read-only location ‘*p’ } int main(void) {
int a = 1; func1(&a); func2(&a); return 0; }
(2)const用来修饰指针做函数传参,作用就在于声明在函数内部不会改变这个指针所指向的内容,所以给该函数传一个不可改变的指针(char *p = "linux";这种)不会触发错误;而一个未声明为const的指针的函数,你给他传一个不可更改的指针的时候就要小心了。
#include <stdio.h> void func3(char *p) {
*p = 'a'; } void func3_1(const char *p) {
*p = 'a'; } void func4(char *p) {
*p = 'a'; } int main(void) {
char *pStr = "linux"; char Str[] = "linux"; // func3(pStr); //可编译通过,运行出现段错误 // printf("pStr = %s\n", pStr); //解决方法:把func函数入参声明成const,编译器可检查出来错误 func3_1(pStr); printf("pStr = %s\n", pStr); func4(Str); printf("Str = %s\n", Str); //结果为ainux return 0; }
3.10.3、函数需要向外部返回多个值时怎么办?
#include <stdio.h> int func1(int a, int *p) {
int result = 0; result = 5 * a; if(result < 100) {
return -1; } else {
*p = result; return 0; } } int main(void) {
//在linux编程应用里最常规常用的一种编程方法 int x = 0; int y = 0; int ret = -1; // x = 30; x = 3; ret = func1(x, &y); //x叫输入型参数,y叫输出型参数 if(-1 == ret) {
printf("func1 error, y < 100.\n"); return -1; } printf("y = %d\n", y); return 0; }
(4)输出型参数就是用来让函数内部把数据输出到函数外部的。
3.10.4、总结
char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n);
返回:C语言指针系列目录
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121262.html