《C语言程序设计 第4版》笔记和代码 第十一章 指针和数组

news2024/11/16 3:44:03

第十一章 指针和数组

11.1 指针和一维数组间的关系

1 由于数组名代表数组元素的连续存储空间的首地址,因此,数组元素既可以用下标法也可以用指针来引用。

例11.1见文末

2 p+1p++在本质上是两个不同的操作,前者不改变当前指针的指向(因为没有进行赋值操作),而后者相当于执行p=p+sizeof(p的基类型),因此改变了p指针的指向,指向下一个元素。

3 p++不是将指针变量加1字节,而是加上1*sizeof(基类型)个字节。

4 输入p和a都是表示首地址,但是数组名a是一个指针常量不可以进行增1或减1操作,而指针p是一个指针变量可以这种操作。

5 用一维数组作函数形参与指针变量作函数形参在本质上都是一样的,因此在被调函数中既能以下标形式也能以指针形式访问元素。

例11.2见文末

11.2 指针和二维数组间的关系

1 如数组:int a[M][N] 可在逻辑上看成一个M行N列的存储空间。

2 可将二维数组看成由多个元素组成的一维数组,因此可以通过行地址列地址定位到每个具体的元素。

3 类似于行地址和列地址,可以用行指针列指针来定位具体元素。

例11.3见文末

11.3 指针数组及其应用

1 指针数组是值由若干个基类型相同的指针组成的数组。定义形式为:

类型关键字 *指针数组名[数量];

2 指针数组可以用存储多个字符串

例11.4见文末

3 指针数组的元素是一个指针,因此与指针变量一样,在使用指针数组前必须对数组元素进行初始化

4 指针数组可用于表示命令行参数

例11.5见文末

11.4 动态数组

1 一个编译后的C程序会获得4块在逻辑上不相同并且用于不同目的的内存储区。

2 从低端起,第一块内存为只读存储区,用于存放程序的机器代码和字符串字面量等只读数据。

3 第一块内存相邻的一块是静态存储区,用于存放程序中的全局变量和静态变量等。

4 其他两块内存分别称为,属于动态存储区

5 用于保存函数调用时的返回地址、函数的形参、局部变量及CPU的当前状态等程序的运行信息;是一个自由存储区,程序可以用C的动态分配函数来使用堆。

6 变量的内存分配可以通过:(1)从静态存储区分配;(2)在上分配;(3)在上分配。

7 指针的另外一个作用是通过与动态内存分配函数联用,使动态数组成为可能。

8 动态内存分配是指程序运行时为变量分配内存的一种方法,在上实现。需要添加头文件<stdlib.h>

9 函数malloc()用于分配若干字节的内存空间,返回一个指向该内存首地址的指针。如果系统不能提供足够的内存单元,函数则会返回一个空指针NULL。

10 malloc()函数的使用举例:

pi=(int *)malloc(sizeof(int));

表明向系统申请一个大小为4字节的内存,并且pi为int型指针。

11 函数calloc()可用于给若干同一类型的数据项分配连续的存储空间并赋值为0,因此calloc()比malloc()更安全。

12 函数free()的功能是释放向系统动态申请的由指针p指向的存储空间。该函数的形参只能是由malloc()或calloc()申请内存时返回的地址。

13 函数realloc()用于改变原来分配的存储空间的大小。

例11.6见文末

14 永远不要忘记用free()释放不再使用的动态申请的内存。

例11.7见文末

代码

11.1a

演示数组元素的引用方法,下标法

//例11.1a 演示数组元素的引用方法,下标法
#include<stdio.h>
int main(void)
{
	int a[5],i;
	printf("Input five numbers:");
	for(i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<5;i++)
	{
		printf("%4d",a[i]);//通过数组下标,一个个将元素打印出来 
	}
	printf("\n");
	return 0;
 }

11.1b

演示数组元素的引用方法,解引用 

//例11.1b 演示数组元素的引用方法,解引用 
#include<stdio.h>
int main(void)
{
	int a[5],i;
	printf("Input five numbers:");
	for(i=0;i<5;i++)
	{
		scanf("%d",a+i);//a+i等价于&a[i] 
	}
	for(i=0;i<5;i++)
	{
		printf("%4d",*(a+i));//等价于a[i] 
	}
	printf("\n");//这种方法是效率最高的 
	return 0;
 } 

 11.1c

演示数组元素的引用方法,用移动指针变量p的方法 

//例11.1c 演示数组元素的引用方法,用移动指针变量p的方法 
#include<stdio.h>
int main(void)
{
	int a[5],*p;
	printf("Input five numbers:");
	for(p=a;p<a+5;p++)
	{
		scanf("%d",p);//指针法输入 
	}
	for(p=a;p<a+5;p++)
	{
		printf("%4d",*p);//指针法输出 
	}
	printf("\n");
	return 0;
 } 

11.1d

演示数组元素的引用方法,用移动指针结合下标的方法 

//例11.1d 演示数组元素的引用方法,用移动指针结合下标的方法 
#include<stdio.h>
int main(void)
{
	int a[5],*p=NULL,i;//需要初始化指针 
	printf("Input five numbers:");
	p=a;//等价于p=&a[0]; 
	for(i=0;i<5;i++)
	{
		scanf("%d",&p[i]);//指针法输入 
	}
	for(i=0;i<5;i++)
	{
		printf("%4d",p[i]);//指针法输出 
	}
	printf("\n");
	return 0;
}

11.2主函数a

主函数a 演示数组和指针变量作为函数参数,实现与例11.1相同的功能

//例11.2 主函数a 演示数组和指针变量作为函数参数,实现与例11.1相同的功能
#include<stdio.h>
int main(void)
{
	int a[5];
	printf("Input five numbers:");
	InputArray(a,5);//数组名作函数参数 
	OutputArray(a,5);
	return 0;
}  

11.2 主函数b

主函数b(实际意义不大) 演示数组和指针变量作为函数参数,实现与例11.1相同的功能

//例11.2 主函数b(实际意义不大) 演示数组和指针变量作为函数参数,实现与例11.1相同的功能
#include<stdio.h>
int main(void)
{
	int a[5];
	int *p=a; 
	printf("Input five numbers:");
	InputArray(p,5);//指针作函数参数 
	OutputArray(p,5);
	return 0;
}

11.2 几类被调函数

//被调函数实现方法一:形参和访问都用数组
void InputArray(int a[],int n);
void OutputArray(int a[],int n);
void InputArray(int a[],int n)//数组作形参 
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);//下标法访问 
	 } 
} 
void OutputArray(int a[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%4d",a[i]);//下标法访问 
	 }
	printf("\n");
}
//被调函数实现方法二:形参和访问都用指针 
void InputArray(int *pa,int n);
void OutputArray(int *pa,int n);
void InputArray(int *pa,int n)//指针作形参 
{
	int i;
	for(i=0;i<n;i++,pa++)//这里指针也需移动 
	{
		scanf("%d",pa);//指针访问 
	 } 
} 
void OutputArray(int *pa,int n)
{
	int i;
	for(i=0;i<n;i++,pa++)
	{
		printf("%4d",*pa);//下标法访问 
	 }
	printf("\n");
}
//被调函数实现方法三:形参为数组类型,访问用指针法 
void InputArray(int a[],int n);
void OutputArray(int a[],int n);
void InputArray(int a[],int n)//指针作形参 
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",a+i);//指针访问 
	 } 
} 
void OutputArray(int a[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%4d",*(a+i);//指针访问 
	 }
	printf("\n");
}
//被调函数实现方法四:形参用指针变量,访问都用数组方式 
void InputArray(int *pa,int n);
void OutputArray(int *pa,int n);
void InputArray(int *pa,int n)//指针作形参 
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",&pa[i]);//数组方式访问 
	 } 
} 
void OutputArray(int *pa,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%4d",pa[i]);//数组方式访问 
	 }
	printf("\n");
}

11.3a

编写程序,输入一个3行4列的二维数组,然后输出这个二维数组的元素值。方法一

//例11.3a 编写程序,输入一个3行4列的二维数组,然后输出这个二维数组的元素值。方法一 
#include<stdio.h>
#define N 4
void InputArray(int p[][N],int m,int n);
void OutputArray(int p[][N],int m,int n);
int main (void)
{
	int a[3][4];
	printf("Input 3*4 numbers:\n");
	InputArray(a,3,4);//向函数传递的是第0行地址
	OutputArray(a,3,4);
	return 0; 
 }
void InputArray(int p[][N],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&p[i][j]);//使用两层循环就可以完成二维数组的输入 
		}
	}
}
void OutputArray(int p[][N],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%4d",p[i][j]);//使用两层循环同样可以实现二维数组的打印 
		}
		printf("\n");//在每一个内层循环结束后添加换行符,相当于实现二维数组的逻辑换行 
	}
}

11.3b

 编写程序,输入一个3行4列的二维数组,然后输出这个二维数组的元素值。方法二 

//例11.3b 编写程序,输入一个3行4列的二维数组,然后输出这个二维数组的元素值。方法二 
#include<stdio.h>
#define N 4
void InputArray(int (*p)[N],int m,int n);//不要忘记(*p) 
void OutputArray(int (*p)[N],int m,int n);
int main (void)
{
	int a[3][4];
	printf("Input 3*4 numbers:\n");
	InputArray(a,3,4);//向函数传递的是第0行地址
	OutputArray(a,3,4);
	return 0; 
 }
void InputArray(int (*p)[N],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",*(p+i)+j);//相当于先按行移动,再找到对应的列 
		}
	}
}
void OutputArray(int (*p)[N],int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%4d",*(*(p+i)+j));//对*(p+i)+j的解引用 
		}
		printf("\n");//在每一个内层循环结束后添加换行符,相当于实现二维数组的逻辑换行 
	}
}

11.3c

编写程序,输入一个3行4列的二维数组,然后输出这个二维数组的元素值。方法三 

//例11.3c 编写程序,输入一个3行4列的二维数组,然后输出这个二维数组的元素值。方法三 
#include<stdio.h>
#define N 4
void InputArray(int *p,int m,int n);//不要忘记(*p) 
void OutputArray(int *p,int m,int n);
int main (void)
{
	int a[3][4];
	printf("Input 3*4 numbers:\n");
	InputArray(*a,3,4);//注意a前面的*,这个时候先函数传递的就是0行0列的地址,不同于前面传递0行地址 
	OutputArray(*a,3,4);
	return 0; 
 }
void InputArray(int *p,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&p[i*n+j]);//相当于先定位到具体的下标 
		}
	}
}
void OutputArray(int *p,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%4d",p[n*i+j]);//同样先定位到具体的下标 
		}
		printf("\n");//在每一个内层循环结束后添加换行符,相当于实现二维数组的逻辑换行 
	}
}

11.4

使用指针数组来重新编写例10.4

//例11.4 使用指针数组来重新编写例10.4
#include<stdio.h>
#include<string.h>
#define MAX_LEN 10//字符串的最大长度
#define N 150   //最大参赛国
void SortString(char *ptr[],int n);
int main(void)
{
	int i,n;
	char name[N][MAX_LEN];//使用字符型的二维数组
	char *pStr[N];
	printf("How many countries?");
	scanf("%d",&n);
	getchar();//读走缓冲区的回车符
	printf("Input their name:\n");
	for(i=0;i<n;i++)
	{
		pStr[i]=name[i];//让pStr指向name的第i行
		gets(pStr[i]);//输入第i个字符串到pStr指向的内容 
	} 
	SortString(pStr,n);//这时候排序的就是pStr 
	printf("Sorted results:\n");
	for(i=0;i<n;i++)
	{
		puts(pStr[i]);//输出排序后字符 
	}
	return 0;
 } 
void SortString(char *ptr[],int n)
{
	//指针数组作函数参数,来用交换法实现字符串的排序
	int i,j;
	char *temp=NULL;//因为交换的是字符串的地址值,所以temp需要为指针变量 
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(strcmp(ptr[j],ptr[i])<0)//用strcmp()函数实现字符串的比较功能
			{
				temp=ptr[i];//这里就使用赋值运算符即可
				ptr[i]=ptr[j];
				ptr[j]=temp; 
			 } 
		}
	 } 
} 

11.5

演示命令行的参数与函数main()各形参之间的关系。

//例11.5 演示命令行的参数与函数main()各形参之间的关系。
#include<stdio.h>
int main(int argc,char *argv)//带参数的main()函数定义,argc和argv是惯例 
{
	int i;
	printf("The number of command line arguments is:%d\n",argc);
	printf("The program name is:%s\n",argv[0]);
	if(argc>1)
	{
		printf("The other arguments are following:\n");
		for(i=1;i<argc;i++)
		{
			printf("%s\n",argv[i]);
		}
	 }
	return 0;
 } 
 

11.6

编程输入某班学生的某门课成绩,计算并输出其平均分。学生人数由键盘输入。

//例11.6 编程输入某班学生的某门课成绩,计算并输出其平均分。学生人数由键盘输入。
#include<stdio.h>
#include<stdlib.h>
void InputArray(int *p,int n);
double Average(int *p,int n);
int main(void)
{
	int *p=NULL,n;
	double aver;
	printf("How many students?");
	scanf("%d",&n);
	p=(int *)malloc(n*sizeof(int));//有多少学生就对应开辟多少空间
	if(p==NULL)//防止出现分配不成功的情况 
	{
		printf("No enough memory!\n");//提醒用户空间分配失败
		exit(1);//结束程序 
	 } 
	printf("Input %d score:",n);
	InputArray(p,n);//输入学生成绩
	aver=Average(p,n);//计算平均分
	printf("aver=%.1f\n",aver);
	free(p);//千万不要忘记释放空间 
	return 0;
 }
void InputArray(int *p,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",&p[i]);
	}
 }
double Average(int *p,int n)
 {
 	int i,sum=0;
 	for(i=0;i<n;i++)
 	{
 		sum+=p[i];
	 }
	 return (double)sum/n;//注意强制转换 
  } 

11.7

编程输入m个班学生(每班n个学生)的某门课成绩,计算并输出平均分。班级数和每班学生数由键盘输入。

//例11.7 编程输入m个班学生(每班n个学生)的某门课成绩,计算并输出平均分。班级数和每班学生数由键盘输入。 
#include<stdio.h>
#include<stdlib.h>
void InputArray(int *p,int m,int n);
double Average(int *p,int m,int n);
int main(void)
{
	int *p=NULL,m,n;
	double aver;
	printf("How many classes?");
	scanf("%d",&m);
	printf("How many stuents in a class?");
	scanf("%d",&n);
	p=(int *)calloc(m*n,sizeof(int));//申请内存 
	if(p==NULL)//防止出现分配不成功的情况 
	{
		printf("No enough memory!\n");//提醒用户空间分配失败
		exit(1);//结束程序 
	 } 
	printf("Input %d score:",n);
	InputArray(p,m,n);//输入学生成绩
	aver=Average(p,m,n);//计算平均分
	printf("aver=%.1f\n",aver);
	free(p);//千万不要忘记释放空间 
	return 0;
 }
void InputArray(int *p,int m,int n)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		printf("Please enter scores of class %d:\n",i+1);
		for(j=0;j<n;j++)
		{
			scanf("%d",&p[n*i+j]);
		}
		
	}
 }
double Average(int *p,int m,int n)
 {
 	int i,j,sum=0;
 	for(i=0;i<m;i++)
 	{
 		for(j=0;j<n;j++)
 		{
 			sum=sum+p[n*i+j];
		 }
	}
	 return (double)sum/n;//注意强制转换 
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第230题二叉搜索树中第K小的元素

题目&#xff1a; 题解&#xff1a; class MyBst { public:MyBst(TreeNode *root) {this->root root;countNodeNum(root);}// 返回二叉搜索树中第k小的元素int kthSmallest(int k) {TreeNode *node root;while (node ! nullptr) {int left getNodeNum(node->left);if…

htb_PermX

PermX 端口开放 80,22 子域名扫描 ffuf -u http://permx.htb -H host: FUZZ.permx.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -fc 301,302 -mc allwww lms 访问lms.permx.htb chamilo 查找cve CVE-2023-4220 Chamilo LMS 未经身份验证的…

代码随想录算法训练营第三十一天|动态规划:01背包理论基础、01背包理论基础(滚动数组)

动态规划&#xff1a;01背包理论基础 1. dp[i][j]: 表示0到i个物品放入容量为j的背包中&#xff0c;价值总和最大是多少 2. dp[i][j]的状态取决于&#xff0c;第i个物品要不要放入这个背包。 不放物品i&#xff1a;dp[i-1][j] (其实就是当物品i的重量大于背包j的重量时&…

Golang | Leetcode Golang题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; func majorityElement(nums []int) (ans []int) {cnt : map[int]int{}for _, v : range nums {cnt[v]}for v, c : range cnt {if c > len(nums)/3 {ans append(ans, v)}}return }

Mediapipe-姿态估计实例

Mediapipe简介 Mediapipe 是由 Google Research 开发的一款开源框架&#xff0c;旨在帮助开发者轻松地构建、测试和部署复杂的多模态、多任务的机器学习模型。它特别擅长于实时处理和分析音频、视频等多媒体数据。以下是 Mediapipe 的一些关键特点和组件&#xff1a; 关键特点…

【Unity2D 2022:UI】制作主菜单

一、创建主菜单游戏场景 1. 在Scenes文件夹中新建一个游戏场景Main Menu 2. 为场景添加背景 &#xff08;1&#xff09;创建画布Canvas &#xff08;2&#xff09;在Canvas中创建新的空游戏物体Main Menu &#xff08;3&#xff09;在Main Menu中新建一个图像游戏物体Backgrou…

Java项目中,常用的SQL语句

常用的命令&#xff1a; 1.数据的增删改查 1.插入数据(进行注册&#xff09; 语法 1&#xff1a; --第一种&#xff1a; INSERT INTO 表名(列名 1,列名 2, …) ; insert into tablename(member1,member3) valuse(,); --第二种&#xff1a; INSERT INTO 表名 VALUES(值 1,值 …

Linux工具篇:yum

前言&#xff1a; 目录 前言&#xff1a; Linux 软件包管理器 yum yum是什么&#xff1f; 什么是软件包&#xff1f; Linux系统&#xff08;centos&#xff09;的生态&#xff1a; 那我的yum是怎么找到对应的软件呢&#xff1f; 关于 rzsz yum查看软件包&#xff08;安装…

Python task

def wordcount(text):# 将文本分割成单词列表&#xff0c;并转换为小写words text.lower().split()# 初始化一个空字典用于存储单词计数word_counts {}# 遍历单词列表中的每个单词for word in words:# 如果单词在字典中&#xff0c;则计数加1&#xff0c;否则将单词加入字典并…

配置sublime的中的C++编译器(.sublime-build),实现C++20在sublime中的使用,小白教程

一&#xff0c;前期准备 首先我们需要准备一下 C 环境&#xff0c;当然如果你觉得你当前的C环境配置好了&#xff0c;并且C的版本也能完成您日常的使用需求&#xff0c;您可以使用下面两条命令对C的版本进行查询 g -vg --version通过返回的版本简单的判断是否能解决您的需求&…

Delta的最新更新可让iPad用户同时模拟多款游戏

Delta iOS 应用程序发布了一个更新&#xff0c;引入了复古 游戏模拟器重新设计的标识&#xff0c;以及原生 iPad 支持&#xff0c;允许用户同时玩多个 游戏。 据 Delta 开发者 Riley Testut 称&#xff0c;欧盟用户可以立即通过AltStore PAL 下载更新&#xff0c;但其他用户则需…

Tomcat多实例

一、Tomcat多实例 Tomcat多实例是指在同一台服务器上运行多个独立的tomcat实例&#xff0c;每个tomcat实例都具有独立的配置文件、日志文件、应用程序和端口&#xff0c;通过配置不同的端口和文件目录&#xff0c;可以实现同时运行多个独立的Tomcat服务器&#xff0c;每个服务…

成为编程大佬!!----->数据结构与算法(2)——顺序表!!

前言&#xff1a;线性表是数据结构与算法的重中之重&#xff0c;所有具有线性逻辑结构的数据结构&#xff0c;都能称为线性表。这篇文章我们先来讨论线性表中的顺序表&#xff0c;顺序表和线性表都是后续实现栈&#xff0c;树&#xff0c;串和图等等结构的重要基础。 目录 ❀简…

YOLOv10改进 | 主干/Backbone篇 | 轻量级网络ShuffleNetV1(附代码+修改教程)

一、本文内容 本文给大家带来的改进内容是ShuffleNetV1&#xff0c;这是一种为移动设备设计的高效CNN架构。它通过使用点群卷积和通道混洗等操作&#xff0c;减少了计算成本&#xff0c;同时保持了准确性&#xff0c;通过这些技术&#xff0c;ShuffleNet在降低计算复杂度的同时…

yolov8、RTDETR无法使用多个GPU训练

yolov8、RTDETR无法使用多个GPU训练 网上看了好多解决方法&#xff1a; 什么命令行 CUDA_VISIBLE_DEVICES0,1 python train.py 环境变量都不行 最后找到解决方案&#xff1a;在ultralytics/engine/trainer.py 中的第246行 将 self.model DDP(self.model, device_ids[RANK])…

Web 应用程序开发的前沿:2024 年会发生什么??

Web 应用程序开发是发展最快的领域之一&#xff0c;令人印象深刻地改变了网络空间的给定面貌。 随着我们进入 2024 年&#xff0c;许多进步趋势和技术正在出现&#xff0c;它们整合了开发人员和商人探索他们才能的新领域。 这篇博客将介绍有关创建 Web 应用程序的最新趋势的想法…

记一次若依框架和Springboot常见报错的实战漏洞挖掘

目录 前言 本次测实战利用图​ 1.判段系统框架 2.登录页面功能点测试 2.1 弱口令 2.2 webpack泄露信息判断 2.3 未授权接口信息发现 3.进一步测试发现新的若依测试点 3.1 默认弱口令 3.2 历史漏洞 4.访问8080端口发现spring经典爆粗 4.1 druid弱口令 4.2 SwaggerU…

牛顿力学和拉格朗日力学求解atwood machine问题对比

一个半径为 R R R、转动惯量为 I I I 的圆盘。绳子与圆盘无滑动&#xff0c;质量 m 2 m_2 m2​ 的物体在重力 g g g 作用下下坠&#xff0c;带动质量 m 1 m_1 m1​ 的物体上升。求 m 1 m_1 m1​和 m 2 m_2 m2​ 的加速度 a a a。 牛顿力学方法 对质量 m 1 m_1 m1​ 和 …

攻防世界(PHP过滤器过滤)file_include

转换过滤器官方文档&#xff1a;https://www.php.net/manual/zh/filters.convert.php#filters.convert.iconv 这道题因为convert.base64-encode被过滤掉了&#xff0c;所以使用convert.iconv.*过滤器 在激活 iconv 的前提下可以使用 convert.iconv.* 压缩过滤器&#xff0c; 等…

Jmeter多用户登录操作实战

在使用Jmeter性能测试时,首先要解决的问题恐怕就会并发压测和多用登录的问题.今天就一篇文章讲清楚这两个问题的解决方案: 一.多并发压测如何配置线程? &#xff08;1&#xff09;同时并发&#xff1a;设置线程组、执行时间、循环次数&#xff0c;这种方式可以控制接口请求的…