当前位置: 首页 > news >正文

指针与函数

指针函数:函数的返回值可以是整型值、浮点型值、字符型值等,在C语言中还允许一个函数的返回值是一个指针(地址),这种返回指针的函数称为指针函数。

指针函数语法格式:

基类型 * 函数名(参数列表);

指针函数代码示例:

#include<stdio.h>
int * func(int * arr,int size)//第一个*返回值是指针 
{int * p = arr;int i;for(i=0;i<size;i++){if(*(arr+i)>*p){p = arr + i;} }return p;
}
int main()
{int arr[5]={8,3,9,5,2};int *p = func(arr,5);printf("数组中最大的元素是:%d,其地址是:%d\n",*p,p);return 0;
}

函数指针变量的定义:如果在程序中定义了一个函数,在编译时,编译器为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针。

定义一个指向函数的指针变量,用来存放某一函数的起始地址 ,这就意味着此指针变量指向该函数。

函数指针语法格式:

返回值类型(*变量名)(参数列表);

函数指针变量代码示例:

#include<stdio.h>
//定义函数
int func(int a,int b)
{return a + b;
} 
int main()
{int result;int(*p)(int,int);    //定义函数指针变量 p = func;           //函数指针指向函数 result = (*p)(3,5);//通过函数指针调用函数printf("(*p)(3,5) = %d\n",result);return 0; 
}

函数指针作为函数参数:指向函数的指针变量的一个重要作用是把函数的地址作为参数传递到其他函数。函数指针作为函数参数,把函数的入口地址传递给形参,就能在被调函数中使用实参函数了。

void func(int(*p)(int,int),int b,int n);

代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int arr[5];int *p[5];int *temp;int i,j;srand((unsigned int)time(0));//强制类型转换for(i=0;i<5;i++){arr[i]=rand()%10;} //原始数组 printf("初始数组元素:");for(i=0;i<5;i++){printf("%d ",arr[i]);}printf("\n");//从小到大排序 for(i=0;i<5;i++){p[i]=&arr[i];}for(i=3;i>=0;i--){for(j=0;j<=i;j++){if(*p[j]>*p[j+1]){temp=p[j];p[j]=p[j+1];p[j+1]=temp;}}}printf("从小到大排序:"); for(i=0;i<5;i++){printf("%d ",*p[i]);}printf("\n");//现在的数组printf("现在数组元素:");for(i=0;i<5;i++){printf("%d ",arr[i]);}printf("\n"); return 0;
}

随机生成指定长度的字符串

代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int len,i;char *buffer=NULL;//接收maloocsrand((unsigned int)time(0));printf("你想要多长的串:"); scanf("%d",&len);buffer=(char*)malloc(len+1);if(buffer==NULL)exit(1);for(i=0;i<len;i++){buffer[i]=rand()%26+'a';}buffer[len]='\0';//字符串结束标志 空字符printf("随机数:%s\n",buffer);free(buffer);//释放空间 return 0;
}

http://www.lryc.cn/news/232116.html

相关文章:

  • GBase8a-GDCA-第二次阶段测试
  • Go 理解零值
  • SQL编写规范【干货】
  • 2.5 Windows驱动开发:DRIVER_OBJECT对象结构
  • [ubuntu]ubuntu上安装jdk1.8教程
  • 金蝶云星空其他出库单保存提示序列号不一致
  • FBI:皇家勒索软件要求350名受害者支付2.75亿美元
  • Layout工程师们--Allegro X AI实现pcb自动布局布线
  • Hive入门--学习笔记
  • 【nlp】1文本预处理总括目录(附各章节链接)
  • 《增长黑客》思维导图
  • oracle-buffer cache
  • 数据可视化—D3(Data Driven Documents)
  • ±15kV ESD 保护、3V-5.5V 供电、真 RS-232 收发器MS2232/MS2232T
  • 企业版远程软件推荐
  • 独孤思维:没学会走就要跑,你只能一辈子是穷b
  • 鸿蒙LiteOs读源码教程+向LiteOS中添加一个系统调用
  • 美国站群服务器IP如何设置分配?
  • R语言——taxize(第二部分)
  • Postman+Newman+Jenkins实现接口测试持续集成
  • C#WPF中的实现读取和写入文件的几种方式
  • 如何利用自动发现将现网的进程纳入到监控系统中?
  • 英语学习(过去篇)
  • excel中通过ROW函数返回引用的行号
  • spring学习笔记-IOC,AOP,事务管理
  • MYSQL中的触发器TRIGGER
  • 用人话讲解深度学习中CUDA,cudatookit,cudnn和pytorch的关系
  • 【JavaEE】Servlet API 详解(HttpServletRequest类)
  • HTML页面的全屏显示及退出全屏案例
  • layui弹出层点回车键无限弹出解决