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

C语言基础_随机数、数组、函数、指针

0、随机数:

  • 要用C语言产生随机数,首先在预处理程序部分要引入stdlib.h头文件,然后就可以用rand()在后续程序中生成随机数了。
  • 如果不设置随机数种子srand(),后面生成的随机数序列就是以41开头的一个固定序列,因此一般以系统时间来设置随机数种子,所以在预处理程序部分还要引入time.h头文件。通过代码srand((unsigned int)time(NULL)); 设置随机数种子。需要注意的是,随机数种子设置一次即可,后面每次生成随机数就行了。

1、数组:

  • 数组:由编译器在栈中申请一片连续空间,其中每一个空间中的元素类型是相同的。因此数组可以通过指针自增,自减来遍历。
  • 语法:数组类型 数组名[数组大小] = {x,x,~,x};
    • 设置数组时,在给数组一次性赋值的情况下,可以省略数组大小。
    • 设置数组时,只是定义数组类型,数组名和数组大小的情况下,可以通过for循环给数组初始化。
  • 数组访问的时候,数组下标都是从0开始的。

2、函数:

  • 函数是面向过程编程语言的最基本的单位。

  • 函数是一个代码块,拥有特定的输入输出接口,用于实现一个特定的功能。

  • 函数优点:
    1、提高代码的可读性
    2、提高代码复用性
    3、提高了可移植性
    4、提高可维护性

  • 函数的定义:

函数类型 函数名(形参){函数体
}

函数的调用:函数名(实参);

  • 函数的类型和返回值
    • 函数可以有返回值,也可以没有返回值
    • 函数的类型就是返回值的类型,可以是任意类型
    • 函数的返回值是由return来给出的,return除了可以给函数返回值以外,还能终止函数。
    • 如果没有返回值,函数类型就是void,没有返回值可以使用return,直接后面跟分号就可以。
  • 注意:在c语言中,函数如果写在主函数后面,那么在主函数前面要写上函数声明,写函数声明只需要写上:函数类型 函数名(形参)即可。
  • 函数递归:函数递归,可以理解就是两个过程,一个是递,一个是归,这个两个过程的转折点就是递归终止条件,满足某个条件之后,递归程序就从递的过程转向了归的过程。

3、指针:

  • 指针的定义就是:存放变量地址的变量;
  • 指针初始化时,为什么指针类型要求必须和它所指向的变量类型一致?
    答:不同类型的变量占用的内存空间大小不同(如int通常 4 字节,char1 字节)。指针类型决定了指针进行加减运算时的步长,以及解引用时访问的内存范围。例如:int* 指针 + 1 会移动 4 字节(跳过一个int),而char* 指针 + 1 只移动 1 字节。如果类型不匹配,可能导致访问越界。
  • int* p; 执行了p+1,就相当于让p保存的地址向后移动4个字节,因为指针指向的是整型变量。数组在内存中是连续存放的,所以可以通过这种方式访问数组中每个元素,一维数组的数组名就是数组的首地址。
  • 指针的初始化方式如下:
int a = 12;
// 正确的指针初始化方式:
int* p1 = &a;
// 错误的指针初始化方式:
int* p2;
*p2 = a;
  • 初始化名命的时候,int p = &a; 在初始化过程中是"解引用"符号,&是"取地址"符号。
  • int* p 等价于 &a; *p等价于a;
  • 如果函数形参设置为指针(int* p),那么传递到函数形参位置的实参就得是一个变量地址(&a)。通过函数设置形参的方式,可以让本来只能返回一个值的函数,返回多个值,这种方法的本质就是,函数把传递进去的变量的值通过运算进行了修改( 利用了*p等价于a)。

总结:

  • 函数是一种便于模块化代码的方式,哪一块出问题就改哪一块代码即可。
  • 指针方便了数组遍历,打破了函数只能返回一个值的魔咒。
http://www.xdnf.cn/news/1244467.html

相关文章:

  • 【机器学习深度学习】模型压缩简介
  • C++ - 基于多设计模式下的同步异步日志系统(11w字)
  • NLP——BERT模型全面解析:从基础架构到优化演进
  • AWS EKS节点扩容时NLB与Ingress的故障处理与优化方案
  • LSTM + 自注意力机制:精准预测天气变化的创新方案
  • 深入剖析 RAG 检索系统中的召回方式:BM25、向量召回、混合策略全解析
  • JS-第二十一天-尺寸位置
  • Android UI 组件系列(十一):RecyclerView 多类型布局与数据刷新实战
  • AI 对话高效输入指令攻略(四):AI+Apache ECharts:生成各种专业图表
  • 【学习笔记】Manipulate-Anything(基于视觉-语言模型的机器人自动化操控系统)
  • 【09】C++实战篇——C++ 生成静态库.lib 及 C++调用lib,及实际项目中的使用技巧
  • javacc学习笔记 02、JavaCC 语法描述文件的格式解析
  • Druid手写核心实现案例 实现一个简单Select 解析,包含Lexer、Parser、AstNode
  • k8s常见问题
  • (论文速读)RMT:Retentive+ViT的视觉新骨干
  • 20250805问答课题-实现TextRank + 问题分类
  • 力扣热题100------21.合并两个有序链表
  • 8.高斯混合模型
  • k8s简介
  • 数据集相关类代码回顾理解 | np.mean\transforms.Normalize\transforms.Compose\xxx.transform
  • Claude Code六周回顾
  • 补:《每日AI-人工智能-编程日报》--2025年7月29日
  • steam Rust游戏 启动错误,删除sys驱动,亲测有效。
  • 机器学习(13):逻辑回归
  • 昇思学习营-模型推理和性能优化学习心得
  • ShowDoc与Docmost对比分析:开源文档管理工具的选择指南
  • 【QT】常⽤控件详解(四)常用显示类控件类 Label LCDNumber ProgressBar Calendar Widget
  • [Oracle] TO_NUMBER()函数
  • HTTPS有哪些优点
  • 【OS】操作系统概述