当前位置: 首页 > 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.dtcms.com/a/316008.html

相关文章:

  • 注意点:如何使用conda创建虚拟环境并使用虚拟环境以及当安装相关库时,如何指定安装到那个环境里面 ---待看
  • Java中公用字符串工具类拿走、直接用
  • 山东省天地图API申请并加载到QGIS和ArcGIS Pro中
  • 什么是mysql的垂直分表,理论依据是什么,如何使用?
  • 无人机光伏识别误检率↓83%!陌讯多模态融合算法实战解析
  • PHP获取淘宝商品详情返回参数详解
  • K8S 性能瓶颈排查
  • 路由的类型
  • Linux驱动学习(八)设备树
  • 无人机 × 巡检 × AI识别:一套可复制的超低延迟低空视频感知系统搭建实践
  • BloodHound 8.0 首次亮相,在攻击路径管理方面进行了重大升级
  • 03-顺序表
  • Spring之【详解FactoryBean】
  • 小程序实时保存优化
  • WWDC 25 极地冰原撸码危机:InlineArray 与 Span 的绝地反击
  • Dell电脑Windows系统更新后声卡驱动无法识别插线耳机问题
  • WebRTC音视频编码模块深度解析:从编解码器到自适应码率控制(2025技术实践)
  • 【安卓][Mac/Windows】永久理论免费 无限ip代理池 - 适合临时快速作战
  • Java+Redis+SpringBoot定时器-定时发布商品
  • 使用vscode编写markdown文档(使用Markdown Preview Enhanced和markdownlint两个插件)以及若干配置
  • Patsy的dmatrix() 函数
  • Docker概述
  • MySQL主从复制部署
  • leetcode700:二叉搜索树中的搜索(递归与迭代双解法)
  • 高可用微服务架构实战:Nacos集群+Nginx负载均衡,Spring Cloud无缝对接
  • qt窗口--01
  • 2025金九银十Java后端面试攻略
  • MoonBit 月兔 - 云和边缘计算 AI云原生编程语言及开发平台
  • 【51单片机 用定时器计时,按键控制LED灯亮(按键按下多少秒,亮几个LED灯,按键松开,LED保持)】2022-10-18
  • Linux驱动24 --- RkMedia 视频 API 使用