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

C语言入门课程学习笔记9:指针

C语言入门课程学习笔记9

  • 第41课 - 指针:一种特殊的变量
    • 实验-指针的使用
    • 小结
  • 第42课 - 深入理解指针与地址
    • 实验-指针的类型
    • 实验
    • 实验
    • 小结
  • 第43课 - 指针与数组(上)
    • 实验
    • 小结
  • 第44课 - 指针与数组(下)
    • 实验
    • 实验
    • 小结
  • 第45课 - 指针与函数
    • 实验
    • 实验
    • 小结
  • 第46课 - 指针与堆空间
    • 实验
    • 实验
    • 小结
  • 第47课 - 指针专题经典问题剖析
    • 小结

第41课 - 指针:一种特殊的变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-指针的使用

#include <stdio.h>int main()
{int var = 0;int another = 0;int* pVar = NULL;printf("1. var = %d\n", var);printf("1. pVar = %p\n", pVar);pVar = &var;  // 使用指针保存变量的地址*pVar = 100;  // *pVar 等价于 var , var = 100;printf("2. var = %d\n", var);printf("2. pVar = %p\n", pVar);pVar = &another;  // 改变了 pVar 的指向,使得 pVar 保存 another 的地址*pVar = 1000;     // another = 1000;printf("3. another = %d\n", another);printf("3. pVar = %p\n", pVar);printf("4. add ==> %d\n", var + another + *pVar);   // 100 + 1000 + 1000  ==> 2100return 0;
}
/*
1. var = 0
1. pVar = 0000000000000000
2. var = 100
2. pVar = 000000000061FE14
3. another = 1000
3. pVar = 000000000061FE10
4. add ==> 2100
*/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

第42课 - 深入理解指针与地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-指针的类型

#include <stdio.h>int main()
{int i = 10;float f = 10;int* pi = &f;    // WARNING  int* 指向了floatfloat* pf = &f;  // OKprintf("pi = %p, pf = %p\n", pi, pf);printf("*pi = %d, *pf = %f\n", *pi, *pf);pi = i;   // WARNING  *pi = 110;  // OOPSprintf("pi = %p, *pi = %d\n", pi, *pi);return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int calculate(int n, long long* pa, long long* pm)
{int ret = 1;if( (1 <= n) && (n <= 20) ){int i = 0;*pa = 0;*pm = 1;for(i=1; i<=n; i++)//  0+1+...+n{			//1*1*...*n*pa = *pa + i;*pm = *pm * i;}}else{ret = 0;}return ret;
}int main()
{long long ar = 0;long long mr = 0;if( calculate(5, &ar, &mr) )printf("ar = %lld, mr = %lld\n", ar, mr);//15   1*2*3*4*5=120return 0;
}

在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>void func(int* p)
{*p = 100;   // 修改内存中 4 字节的数据,即:修改一个整型变量的值
}void swap(int* pa, int* pb)//通过指针交换变量
{int t = 0;t = *pa;*pa = *pb;*pb = t;
}int main()
{int var = 0;int a = 1, b = 2;printf("1. var = %d\n", var);func( &var );printf("2. var = %d\n", var);//100printf("3. a = %d, b = %d\n", a, b);swap(&a, &b);printf("4. a = %d, b = %d\n", a, b);return 0;
}

小结

在这里插入图片描述

第43课 - 指针与数组(上)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int main()
{int a[] = {1, 2, 3, 4, 0};int* p = a;  // a 的类型为 int*, &a[0] ==> int*int (*pa) [5] = &a;//指向数组的指针  注意指针类型printf("%p, %p\n", p, a);p++;//p+1==== p+1*sizeof(p)*p = 100;  // a[1] = 100;printf("%d, %d\n", *p, a[1]);printf("%p, %p\n", &a, a);//????值一样 但是意思不一样,数组的地址  数组首元素的地址p = pa;   // WARNING  !!!!   warning: assignment to 'int *' from incompatible pointer type 'int (*)[5]' p = a;while( *p ){printf("%d\n", *p);p++;}return 0;
}
/*
000000000061FDF0, 000000000061FDF0
100, 100
000000000061FDF0, 000000000061FDF0
1
100
3
4
*/

小结

在这里插入图片描述

第44课 - 指针与数组(下)

在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int main()
{int a[] = {1, 2, 3, 4, 5};int* p = a;int i = 0;// a[i] <==> *(a+i) <==> *(p+i) <==> p[i]for(i=0; i<5; i++){printf("%d, %d\n", a[i], *(a + i));}for(i=0; i<5; i++){printf("%d, %d\n", a[i], p[i]);}for(i=0; i<5; i++){printf("%d, %d\n", p[i], *(p + i));}printf("a = %p, p = %p\n", a, p);//值相同printf("&a = %p, &p = %p\n", &a, &p);//值不同return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int main()
{int a[] = {1, 2, 3};int* p = a;int v = *p++;//int v=*p,p++;char* s = NULL;printf("%p\n", "D.T.Software");printf("%p\n", "D.T.Software");printf("v = %d, *p = %d\n", v, *p);printf("First = %c\n", *"D.T.Software");s = "D.T.Software";while( *s ) printf("%c", *s++);printf("\n");return 0;
}
/*
0000000000404000
0000000000404000
v = 1, *p = 2
First = D
D.T.Software
*/

小结

在这里插入图片描述

第45课 - 指针与函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int add(int a, int b)
{return a + b;
}int mul(int a, int b)
{return a * b;
}int calculate(int a[], int len, int(*cal)(int, int))
{int ret = a[0];int i = 0;for(i=1; i<len; i++){ret = cal(ret, a[i]);}return ret;
}int main()
{int a[] = {1, 2, 3, 4, 5};int (*pFunc) (int, int) = NULL;pFunc = add;printf("%d\n", pFunc(1, 2));//3printf("%d\n", (*pFunc)(3, 4));//7pFunc = &mul;printf("%d\n", pFunc(5, 6));//30printf("%d\n", (*pFunc)(7, 8));//56printf("1 + ... + 5 = %d\n", calculate(a, 5, add));//15printf("1 * ... * 5 = %d\n", calculate(a, 5, mul));//120return 0;
}

在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int demo(int arr[], int len)  // int demo(int* arr, int len)//数组求和
{int ret = 0;int i = 0;printf("demo: sizeof(arr) = %d\n", sizeof(arr));// 8 退化为指针了while( i < len ){ret += *arr++;i++;}return ret;
}int main()
{int a[] = {1, 2, 3, 4, 5};// int v = *a++;printf("return value: %d\n", demo(a, 5));//return 0;
}

小结

在这里插入图片描述

第46课 - 指针与堆空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int main()
{char c = 0;int i = 0;float f = 2.0f;double d = 3.0;void* p = NULL;double* pd = NULL;int* pi = NULL;/* void* 指针可以保存任意类型的地址 */p = &c;p = &i;p = &f;p = &d;printf("%p\n", p);// void* 类型的指针无法访问内存中的数据// printf("%f\n", *p);/* void* 类型的变量可以直接合法的赋值给其他具体数据类型的指针变量 */pd = p;pi = p;// void* 是例外,其他指针类型的变量不能相互赋值// pd = pi;return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>
#include <stdlib.h>int main()
{int* p = malloc(4); // 从堆空间申请 4 个字节当作 int 类型的变量使用if( p != NULL )  // 如果申请失败 p 为 0 ,即:空值{*p = 100;printf("%d\n", *p);//100free(p);}p = malloc(4 * sizeof(int));if( p != NULL ){int i = 0;for(i=0; i<4; i++){p[i] = i * 10;}for(i=0; i<4; i++){printf("%d\n", p[i]);}free(p);}return 0;
}
/*
100
0
10
20
30
*/

小结

在这里插入图片描述

第47课 - 指针专题经典问题剖析

在这里插入图片描述

 #include <stdio.h>
#include <stdlib.h>int main()
{int a = 0;int b = 1;int* p = &a;  //p指向aint** pp = &p;//pp指向p**pp = 2;   // a = 2;*pp = &b;   // p = &b;  *p = 3;     // b = 3;printf("a = %d, b = %d\n", a, b);return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>int main()
{int a[] = {1, 2, 3, 4};int* pa = a;int b[2][2] = {{1, 2}, {3, 4}};// int** pb = b;  // b 的类型绝对不是 int**  warning: initialization of 'int **' from incompatible pointer type 'int (*)[2]'int (*pnb) [2] = b;  // b 的类型是 int(*)[2]printf("a = %p, pa = %p\n", a, pa);// printf("b = %p, pb = %p\n", b, pb);printf("b = %p, pnb = %p\n", b, pnb);return 0;
}
/*
a = 000000000061FE00, pa = 000000000061FE00
b = 000000000061FDF0, pnb = 000000000061FDF0
*/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>int getDouble(double** pp, unsigned n)
{int ret = 0;double* pd = malloc(sizeof(double) * n);if( pd != NULL ){printf("pd = %p\n", pd);*pp = pd;ret = 1;}return ret;
}int main()
{double* p = NULL;if( getDouble(&p, 5) ){printf("p = %p\n", p);free(p);}return 0;
}
/*
pd = 00000000006E5CB0
p = 00000000006E5CB0
*/

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>int main()
{int b[2][2] = {{1, 2}, {3, 4}};int (*pnb) [2] = b;  // b 的类型是 int(*)[2]*pnb[0] = 10;//*(pnb[0])*pnb[1] = 30;printf("b[0][0] = %d\n", b[0][0]);printf("b[0][1] = %d\n", b[0][1]);//30printf("b[1][0] = %d\n", b[1][0]);printf("b[1][1] = %d\n", b[1][1]);return 0;
}
/*
b[0][0] = 10
b[0][1] = 2
b[1][0] = 30
b[1][1] = 4
*/

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>int main()
{int b[2][2] = {{1, 2}, {3, 4}};int (*pnb) [2] = b;  // b 的类型是 int(*)[2]*pnb[0] = 10;
int * k=pnb[0] +1;//??  pnb[0] +sizeof(*pnb[0])对了 *k= 20;//  *pnb[1] = 30;
printf("sizeof(pnb) = %d\n", sizeof(pnb));
printf("sizeof(pnb[0]) = %d\n", sizeof(pnb[0]));
printf("sizeof(*pnb) = %d\n", sizeof(*pnb));
printf("sizeof(*pnb[0]) = %d\n", sizeof(*pnb[0]));
printf("pnb=%p\n",pnb);
printf("pnb[0]=%p\n",pnb[0]);
printf("pnb[0]+1=%p\n",pnb[0]+1);printf("sizeof(b) = %d\n", sizeof(b));
printf("sizeof(int[2]) = %d\n", sizeof(int[2]));printf("b[0][0] = %d\n", b[0][0]);printf("b[0][1] = %d\n", b[0][1]);//30printf("b[1][0] = %d\n", b[1][0]);printf("b[1][1] = %d\n", b[1][1]);return 0;
}
/*
sizeof(pnb) = 8
sizeof(pnb[0]) = 8
sizeof(*pnb) = 8
sizeof(*pnb[0]) = 4
pnb=000000000061FE00
pnb[0]=000000000061FE00
pnb[0]+1=000000000061FE04
sizeof(b) = 16
sizeof(int[2]) = 8
b[0][0] = 10
b[0][1] = 20
b[1][0] = 3
b[1][1] = 4
*/

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>int* func()
{int var = 100;return &var;
}int main()
{int* p = func();  // OOPS!!!!// p 指向了不合法的地址,这个地址处没有变量存在// p 是一个野指针,保存不合法地址的指针都是野指针printf("*p = %d\n", *p);*p = 200;   // 改变 func 函数中局部变量 var 的值,是不是非常奇怪???printf("*p = %d\n", *p);return 0;
}

小结

在这里插入图片描述

相关文章:

C语言入门课程学习笔记9:指针

C语言入门课程学习笔记9 第41课 - 指针&#xff1a;一种特殊的变量实验-指针的使用小结 第42课 - 深入理解指针与地址实验-指针的类型实验实验小结 第43课 - 指针与数组&#xff08;上&#xff09;实验小结 第44课 - 指针与数组&#xff08;下&#xff09;实验实验小结 第45课 …...

借助 Cloudflare D1 和 Drizzle 在 Astro 上实现全栈

使用 Cloudflare D1 和 Drizzle ORM 将后端添加到 Astro 项目的分步指南 文章目录 安装 Astro添加 Cloudflare 适配器部署到 Pages安装 wrangler 并登录创建 D1 数据库创建 wrangler.toml 文件将 .wrangler 添加到 .gitignore更新 astro.config.ts安装 Drizzle 依赖项创建 driz…...

SUSE linux 15的网络管理

1 手工配置网络 wicked提供了一种新的网络配置框架。自SUSE 12起&#xff0c;SUSE使用了新的网络管理工具wicked&#xff0c;这个是区别与其他常见发行版的。常见的发行版目前大多使用的是NetworkManager服务进行网络管理。 1.1 wicked网络配置 传统网络接口管理面临的挑战之…...

海康威视-下载的录像视频浏览器播放问题

目录 1、播放异常比对 2、视频编码检查 2.1、正常视频解析 2.2、海康视频解析 2.3、比对工具 3、转码 3.1、maven依赖 3.2、实现代码 4、验证 在前面的文章&#xff08;海康威视-按时间下载录像文件_海康威视 sdk 下载录像 大小0-CSDN博客&#xff09;中&#xff0c;通…...

养殖自动化管理系统:开启智慧养殖新篇章

在现代农业的快速演进中&#xff0c;养殖业正经历一场前所未有的技术革命。养殖自动化管理系统&#xff0c;作为这场变革的前沿科技&#xff0c;正逐步成为推动行业高效、环保、可持续发展的关键力量。本文将深入探讨自动化养殖系统如何通过精准管理、智能监控、数据驱动决策&a…...

SmartEDA革新来袭:融合Multisim与Proteus精髓,引领电子设计新纪元!

在电子设计领域&#xff0c;每一次技术的革新都如同春风化雨&#xff0c;滋润着设计师们的心田。今天&#xff0c;我们迎来了一个划时代的电子设计自动化&#xff08;EDA&#xff09;工具——SmartEDA&#xff0c;它不仅融合了业界知名的Multisim和Proteus的精华&#xff0c;更…...

【FFmpeg】AVFormatContext结构体

【FFmpeg】AVFormatContext结构体 1.AVFormatContext结构体1.2 const struct AVInputFormat *iformat1.3 const struct AVOutputFormat *oformat 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVFormatContext 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FF…...

【SpringSecurity】认证与鉴权框架SpringSecurity——授权

目录 权限系统的必要性常见的权限管理框架SpringSecurity授权基本流程准备脚本限制访问资源所需权限菜单实体类和Mapper封装权限信息封装认证/鉴权失败处理认证失败封装鉴权失败封装配置SpringSecurity 过滤器跨域处理接口添加鉴权hasAuthority/hasAnyAuthorityhasRole/​ hasA…...

深入解析FTP:原理、架构与搭建方式

在当今互联网世界中&#xff0c;文件传输是日常工作和生活中不可或缺的一部分。FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;作为一种老而弥坚的协议&#xff0c;一直在文件传输领域发挥着重要作用。本文将从技术人的角度&#xff0c;详细分析F…...

Springboot与RestTemplate

RestTemplate是Spring提供的用于访问Rest服务的客户端&#xff0c;RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。 一、使用Get进行访问 1、获取json格式 使用 getForEntity() API 发起 GET 请求&#xff1a; RestTemplate restTemplate…...

端口发布与暴露

端口发布与暴露 目录 发布端口发布到临时端口发布所有端口试一试 使用 Docker CLI使用 Docker Compose 如果你一直在跟随本指南&#xff0c;你应该理解容器为应用程序的每个组件提供了隔离的进程。每个组件 - 如 React 前端、Python API 和 Postgres 数据库 - 都运行在自己的…...

Unity:使用Texture2D动态创建的图像无法正常显示 / 修改图像后未生效

开发中遇到需要动态绘制图像的需求&#xff0c;前后文代码如下所示&#xff1a; Texture2D newImageTexture new Texture2D(width, height); Color32[] newImagePixels new Color32[height * width];for (int y 0; y < height ; y) {for (int x 0; x < width; x){if…...

【LinuxC语言】详解TCP/IP

文章目录 前言TCP与UDP协议的介绍TCP协议流式传输TCP的三次握手连接TCP的四次挥手连接断开总结前言 在我们的日常生活中,无论是浏览网页,还是发送电子邮件,甚至是在线视频聊天,都离不开网络通信。而在网络通信中,TCP和UDP协议起着至关重要的作用。本文将以通俗易懂的语言…...

数字化转型下的企业人力资源信息系统研究

随着数字化转型的加速&#xff0c;企业人力资源管理面临着全新的挑战和机遇。传统的人力资源信息系统&#xff08;HRIS&#xff09;在新时代的要求下必须进行深刻的革新和升级&#xff0c;以更好地支持企业的发展战略和员工的需求。 数据驱动的决策支持 在当今这个信息化迅猛发…...

docker camunda 8.5 部署步骤

Camunda Platform 8 环境准备 Docker 版本要求 Docker 20.10.16 is required; docker compose version 1.27.0.;github 开源地址:https://github.com/camunda/camunda-platformcamunda7 文档地址:https://docs.camunda.org/manual/7.21/user-guide/process-engine/社区地址: …...

学懂C#编程:常用高级技术——委托(Delegate)应用场景——委托与Lambda表达式的结合使用详解

在C#中&#xff0c;委托与Lambda表达式的结合使用是现代编程实践中的一个重要且强大的特性&#xff0c;它极大地提高了代码的简洁性和可读性。下面将详细讲解这两个概念如何协同工作&#xff0c;以及如何在实际编程中有效利用它们。 委托基础 委托是C#中的一种引用类型&#x…...

05-java基础——循环习题

循环的选择&#xff1a;知道循环的次数或者知道循环的范围就使用for循环&#xff0c;其次再使用while循环 猜数字 程序自动生成一个1-100之间的随机数&#xff0c;在代码中使用键盘录入去猜出这个数字是多少&#xff1f; 要求&#xff1a;使用循环猜&#xff0c;一直猜中为止…...

网络安全等级保护测评

网络安全等级保护 《GB17859 计算机信息系统安全保护等级划分准则》 规定计算机信息系统安全保护等级共分五级 《中华人民共和国网络安全法》 “国家实行网络安全等级保护制度。 等级测评 测评机构依据国家网络安全等级保护制度规定&#xff0c;按照有关 管理规范和…...

真有被这套零售数据分析方案惊艳到

在数字化时代&#xff0c;零售行业的竞争愈发激烈&#xff0c;如何精准把握市场动态、优化业务流程、提升市场竞争力成为了每一家零售企业都面临的挑战。奥威BI零售数据分析方案&#xff0c;一款具备全面、高效、智能的数据分析能力的BI方案出现地恰到好处。 奥威BI零售数据分…...

亚马逊卖家为何需要自养账号?揭秘背后的原因

亚马逊是一家极为重视用户体验的国际电商平台&#xff0c;因此用户的评论和星级评价对店铺排名影响深远。平台审核评论非常严格&#xff0c;这些评价直接影响商品在平台上的生存和发展。 在亚马逊上&#xff0c;用户的评分和评论对商品的成功至关重要。好评多的商品通常被认为优…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...