IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言---24 三子棋 -> 正文阅读

[C++知识库]c语言---24 三子棋


今天的内容分为分成三部分来写,分为test.c game.h game.c(学习一下如何拆分代码)
其中, test.c 测试游戏的逻辑; game.h 关于游戏相关的函数声明,符号声明,头文件的包含; game.c 游戏相关函数的实现
开始进入正题吧。

打印菜单以及棋盘

在一开始就打印简易菜单,使用do while来实现

do
	{
		menu();//简易菜单
		printf("请选择:》");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			printf("三子棋\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);

简易菜单

void menu()
{
	printf("***********************************\n");
	printf("***********   1.play   ************\n");
	printf("***********   0.exit   ************\n");
	printf("***********************************\n");
}

打印完菜单之后,进行选择,键入1则进入游戏,0则退出游戏,键入其它则重新键入数字进行选择。

棋盘初始化

使用二维数组来建立棋盘,这只一个row行col列的二维数组。在game.h头文件中定义数组的行和列#define ROW 3 #define COL 3

//存储数据  - 用二维数组
	char board[ROW][COL];
	//希望二维数组最开始的时候都是空格
	//初始化棋盘,初始化为空格
	InitBoard(board,ROW,COL);//这个初始化函数是属于游戏模块的,将其放到game.h里面
	//要传入二维数组,要传入行和列
void InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}

设置好棋盘的行和列之后,对棋盘进行初始化

//棋盘显示
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0; int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}	
		}
		printf("\n");
		if (i < row - 1)
		{
			//printf("---|---|---\n");
			int j = 0;
			for (j = 0; j < col; j++)
			{
				printf("---");
				if(j<col-1)
					printf("|");
			}
			printf("\n");
		}
	}
}

测试显示结果:

***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
   |   |
---|---|---
   |   |
---|---|---
   |   |

在这里插入图片描述

假设没有初始化棋盘的话,将InitBoard(board,ROW,COL);给注释掉,观察一下打印结果:

***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
 ?| ?| ?
---|---|---
 ?| ?| ?
---|---|---
 ?| ?| ?

可以看到,如果不初始化棋盘的话,打印出来的就是随机值。
有一点需要注意,当前的代码写得还是不够通用。如果将头文件game.h中的行和列均改为10,因为在打印棋盘的函数实现那里只写出来三列,所以之后即使在头文件里面更改了行和列的数字,也还是只有三列。
如何修改代码呢?将每一个棋盘看成是被分割线分开的,行元素之间的分隔线是|,列元素之间的分割线是—

void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0; int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}	
		}
		printf("\n");
		if (i < row - 1)
		{
			//printf("---|---|---\n");
			int j = 0;
			for (j = 0; j < col; j++)
			{
				printf("---");
				if(j<col-1)
					printf("|");
			}
			printf("\n");
		}
	}
}

测试一下效果:

***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |
---|---|---|---|---|---|---|---|---|---
   |   |   |   |   |   |   |   |   |

玩家下棋:


玩家下棋的功能要求玩家输入所要放入棋子的坐标,坐标分别为(1,1)(1,2)、(1,3)、(2,1)、(2,2)、(2,3)、(3,1)、(3,2)、(3,3)行和列的坐标都是从1开始。首先要判断玩家键入的坐标是否合法,我们知道二维数组的元素下标无论是行还是列都是从0开始的,也就是(0,0)/(0,1)/(0,2) (1,0)/(1,1)/(1,2) (2,0)/(2,1)/(2,2)。所以判断坐标的合法性就看坐标的值是否都小于等于行的值和列的值,且大于等于1,因此就有了判断条件:

if (x >= 1 && x <= row && y >= 1 && y <= col)
{
	//坐标合理则进行游戏
}
else
		{
			printf("坐标非法,请重新输入\n");
		}

其次要在进行游戏时,判断坐标处是否被占用

if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("坐标被占用,请重新输入\n");
			}

编写好这一部分的代码时,验证一下功能吧。玩家下棋代码的运行结果的测试:

***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
   |   |
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
1 1
 * |   |
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
1 1
坐标被占用,请重新输入
请输入下棋的坐标:》
1 3
 * |   | *
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
1 4
坐标非法,请重新输入
请输入下棋的坐标:》

电脑下棋


电脑下棋与玩家落子的原理都是一样的,都需要给定一个坐标。这里用生成随机数的方法来生成电脑落子的坐标。生成随机数要用到rand函数,在用rand函数的时候会首先用到srand,这里我们将srand函数写到main函数里面。

srand((unsigned int)time(NULL));
//用time函数的返回值作为随机数的生成器
	//time函数调用的时候返回空指针,返回类型强制转换成unsigned int
	//
	// 这个要包含头文件<stdlib.h><time.h>,将这两个头文件添加至game.h
	//

电脑下棋函数的实现如下:

void ComputerMove(char board[ROW][COL], int row, int col)
{
	//让电脑下棋随机下
	printf("电脑走:>\n");
	while (1)
	{
		//产生横纵坐标
		int x = rand() % row;
		int y = rand() % col;//使用rand之前要调用srand
		//希望横纵坐标的范围都是0-2,就可以让rand()%3,即对row和col取余,对3取余的结果就是0,1,2
		//判断坐标是否被占用
		if (board[x][y] == ' ')//由于电脑的坐标范围本身就是0-2,所以它的坐标不用减一了,也不用判断坐标的合法性了
		{
			board[x ][y ] = '#';
			break;
		}

	}	//不能对电脑做提示说下错位置了,所以设置一个循环,直到落子正确才退出循环
}

编写好电脑下棋的代码之后,测试一下运行效果:

***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
   |   |
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
1 1
 * |   |
---|---|---
   |   |
---|---|---
   |   |
电脑走:>
 * |   | #
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
2 3
 * |   | #
---|---|---
   |   | *
---|---|---
   |   |
电脑走:>
 * |   | #
---|---|---
   |   | *
---|---|---
   | # |
玩家走:》
请输入下棋的坐标:》
1 2
 * | * | #
---|---|---
   |   | *
---|---|---
   | # |
电脑走:>
 * | * | #
---|---|---
   | # | *
---|---|---
   | # |
玩家走:》
请输入下棋的坐标:》
2 1
 * | * | #
---|---|---
 * | # | *
---|---|---
   | # |
电脑走:>
 * | * | #
---|---|---
 * | # | *
---|---|---
   | # | #
玩家走:》
请输入下棋的坐标:》
3 1
 * | * | #
---|---|---
 * | # | *
---|---|---
 * | # | #
电脑走:>

可以看到,最后棋盘被占满,电脑没办法走了,编程死循环了,所以接下来还要做一些工作。在无论是玩家还是电脑下棋之后,每一次落子都要判断一下谁赢啦。


判断游戏状态


分析一下:
在游戏进行的过程中,分为四种状态:

  • 玩家赢了—此时返回一个*
  • 电脑赢了—此时返回一个#
  • 谁也没赢,平局----返回Q
  • 没有赢,也没有平局,游戏继续—返回C

那么IsWin函数返回的就是char类型。要判断有没有人赢得游戏的话,就是要判断数组里面是不是有3个相连的,三个横线相连,三个列相连或者对角线相连。所以还是需要传参过去,要遍历数组的行、列以及对角线。所以传过去的参数有board以及ROW, COL。将函数的返回值记录到ret里面去。
在前三种状态下,游戏应该结束,最后一种状态的情况下,游戏继续。

//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col)
{
	//先判断3行,看每一行行里的三个元素是否相等,且它们不等于空格,然后让它返回这三个元素中的任意一个即可
	int i = 0;
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][0];
		}
	}

	//判断3列
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
		{
			return board[0][i];
		}
	}

	//判断对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
		return board[1][1];
	}

	//判断平局
	//前面的三种情况下一定有人赢了,那么怎么判断平局呢?那就是棋盘满了,棋盘满了又不在上面的三种情况下,就说明平局了
	//怎么判断棋盘满了呢?
	//如果满了返回1,没满返回0
	int ret=IsFull(board,row,col);
	if (ret == 1)
	{
		return 'Q';
	}
	return 'C';
	
}
//判断棋盘是否满了
int IsFull(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;//棋盘没满
			}
		}
	}
	return 1;//循环结束,仍然得不到0的时候就让它返回1,证明棋盘满了
}

演示一下代码的整体效果:

玩家赢了的情况:


***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
   |   |
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
1 1
 * |   |
---|---|---
   |   |
---|---|---
   |   |
电脑走:>
 * |   |
---|---|---
   |   |
---|---|---
   | # |
玩家走:》
请输入下棋的坐标:》
2 2
 * |   |
---|---|---
   | * |
---|---|---
   | # |
电脑走:>
 * |   |
---|---|---
 # | * |
---|---|---
   | # |
玩家走:》
请输入下棋的坐标:》
3 3
 * |   |
---|---|---
 # | * |
---|---|---
   | # | *
玩家赢了
 * |   |
---|---|---
 # | * |
---|---|---
   | # | *

电脑赢了的情况:

***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
   |   |
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
3 3
   |   |
---|---|---
   |   |
---|---|---
   |   | *
电脑走:>
   |   |
---|---|---
   |   |
---|---|---
 # |   | *
玩家走:》
请输入下棋的坐标:》
3 2
   |   |
---|---|---
   |   |
---|---|---
 # | * | *
电脑走:>
   |   |
---|---|---
   | # |
---|---|---
 # | * | *
玩家走:》
请输入下棋的坐标:》
1 1
 * |   |
---|---|---
   | # |
---|---|---
 # | * | *
电脑走:>
 * |   |
---|---|---
   | # | #
---|---|---
 # | * | *
玩家走:》
请输入下棋的坐标:》
2 1
 * |   |
---|---|---
 * | # | #
---|---|---
 # | * | *
电脑走:>
 * |   | #
---|---|---
 * | # | #
---|---|---
 # | * | *
电脑赢了
 * |   | #
---|---|---
 * | # | #
---|---|---
 # | * | *

平局的情况:

***********************************
***********   1.play   ************
***********   0.exit   ************
***********************************
请选择:》1
三子棋
   |   |
---|---|---
   |   |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
2 2
   |   |
---|---|---
   | * |
---|---|---
   |   |
电脑走:>
   |   | #
---|---|---
   | * |
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
2 3
   |   | #
---|---|---
   | * | *
---|---|---
   |   |
电脑走:>
   |   | #
---|---|---
 # | * | *
---|---|---
   |   |
玩家走:》
请输入下棋的坐标:》
1 2
   | * | #
---|---|---
 # | * | *
---|---|---
   |   |
电脑走:>
   | * | #
---|---|---
 # | * | *
---|---|---
   | # |
玩家走:》
请输入下棋的坐标:》
3 1
   | * | #
---|---|---
 # | * | *
---|---|---
 * | # |
电脑走:>
   | * | #
---|---|---
 # | * | *
---|---|---
 * | # | #
玩家走:》
请输入下棋的坐标:》
1 1
 * | * | #
---|---|---
 # | * | *
---|---|---
 * | # | #
平局
 * | * | #
---|---|---
 # | * | *
---|---|---
 * | # | #

该代码还是有不足的,就是在判断输赢的那一块,该代码只能判断三子棋的输赢,之后需要想一下怎么才能实现更好地判断输赢,使得代码具有普遍性呢。

整体代码如下:

test.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//game.h是自己写的头文件,所以包含头文件的时候要加双引号
#include "game.h"

void menu()
{
	printf("***********************************\n");
	printf("***********   1.play   ************\n");
	printf("***********   0.exit   ************\n");
	printf("***********************************\n");
}


void game()
{
	//存储数据  - 用二维数组
	char board[ROW][COL];
	//希望二维数组最开始的时候都是空格
	//初始化棋盘,初始化为空格
	InitBoard(board,ROW,COL);//这个初始化函数是属于游戏模块的,将其放到game.h里面
	//要传入二维数组,要传入行和列

	//打印一下棋盘---本质是打印数组的内容
	DisplayBoard(board, ROW, COL);

	//玩家走,玩家走完之后打印棋盘,同时判断输赢
	//电脑走,电脑走完之后打印棋盘,同时判断输赢
	char ret = 0;//获取游戏的状态
	while (1)
	{
		//玩家下棋
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);//打印落子之后的情况
		//一旦打印好之后,就判断输赢
		// 判断玩家是否赢得游戏
		ret = IsWin(board, ROW, COL);
		//char ret=IsWin(board, ROW, COL);//希望这个函数既可以判断玩家赢了没,又可以判断电脑赢了没
		if (ret != 'C')
			break;

		//电脑下棋
		ComputerMove(board,ROW,COL);
		DisplayBoard(board, ROW, COL);
		// 判断电脑是否赢得游戏
		ret = IsWin(board, ROW, COL);
		//char ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
	{
		printf("玩家赢了\n");
		//DisplayBoard(board, ROW, COL);//打印落子之后的情况
	}
	else if(ret == '#')
	{
		printf("电脑赢了\n");
		//DisplayBoard(board, ROW, COL);//打印落子之后的情况
	}
	else 
	{
		printf("平局\n");
		//DisplayBoard(board, ROW, COL);//打印落子之后的情况
	}
	DisplayBoard(board, ROW, COL);//打印落子之后的情况
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//用time函数的返回值作为随机数的生成器
	//time函数调用的时候返回空指针,返回类型强制转换成unsigned int
	//
	// 这个要包含头文件<stdlib.h><time.h>
	//
	do
	{
		menu();//简易菜单
		printf("请选择:》");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			printf("三子棋\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

game.h

#pragma once
//头文件的包含
#include <stdio.h>
#include < stdlib.h > 
#include <time.h>
//符号的定义
#define ROW 3
#define COL 3
//为什么要把这些信息放到头文件里面呢?
//只要想用到ROW  COL就包含一下头文件就可以了

//函数的声明
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘的函数
void DisplayBoard(char board[ROW][COL], int row, int col);
//玩家下棋的函数
void PlayerMove(char board[ROW][COL], int row, int col);
//电脑下棋的函数
void ComputerMove(char board[ROW][COL], int row, int col);
//判断输赢
char IsWin(char board[ROW][COL], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS

#include "game.h"
void InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}


//void DisplayBoard(char board[ROW][COL], int row, int col)
//{
//	int i = 0;
//	for (i = 0; i < row; i++)
//	{
//		printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
//		if (i < row - 1)
//		{
//			printf("---|---|---\n");
//		}
//	}
//}
//上面的代码不够通用

//棋盘显示
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0; int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}	
		}
		printf("\n");
		if (i < row - 1)
		{
			//printf("---|---|---\n");
			int j = 0;
			for (j = 0; j < col; j++)
			{
				printf("---");
				if(j<col-1)
					printf("|");
			}
			printf("\n");
		}
	}
}


//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;

	printf("玩家走:》\n");
	while (1)
	{
		printf("请输入下棋的坐标:》\n");
		scanf("%d %d", &x, &y);
		//判断坐标的合理性
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			//下棋
			//判断坐标是否被占用
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("坐标被占用,请重新输入\n");
			}
		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}
}


//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{
	//让电脑下棋随机下
	printf("电脑走:>\n");
	while (1)
	{
		//产生横纵坐标
		int x = rand() % row;
		int y = rand() % col;//使用rand之前要调用srand
		//希望横纵坐标的范围都是0-2,就可以让rand()%3,即对row和col取余,对3取余的结果就是0,1,2
		//判断坐标是否被占用
		if (board[x][y] == ' ')//由于电脑的坐标范围本身就是0-2,所以它的坐标不用减一了,也不用判断坐标的合法性了
		{
			board[x ][y ] = '#';
			break;
		}

	}	//不能对电脑做提示说下错位置了,所以设置一个循环,直到落子正确才退出循环
}

//判断棋盘是否满了
int IsFull(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;//棋盘没满
			}
		}
	}
	return 1;//循环结束,仍然得不到0的时候就让它返回1,证明棋盘满了
}

//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col)
{
	//先判断3行,看每一行行里的三个元素是否相等,且它们不等于空格,然后让它返回这三个元素中的任意一个即可
	int i = 0;
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][0];
		}
	}

	//判断3列
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
		{
			return board[0][i];
		}
	}

	//判断对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
		return board[1][1];
	}

	//判断平局
	//前面的三种情况下一定有人赢了,那么怎么判断平局呢?那就是棋盘满了,棋盘满了又不在上面的三种情况下,就说明平局了
	//怎么判断棋盘满了呢?
	//如果满了返回1,没满返回0
	int ret=IsFull(board,row,col);
	if (ret == 1)
	{
		return 'Q';
	}
	return 'C';
	
}

补充:

数组作为函数传参的时候: 在函数调用部分,实参写的是数组名;函数定义时,传过去的形参可以写成2种形式:一种是数组形式;另一种是指针形式。但是这个传过去的形参本质上都是指针,因为在数组传参的时候,传过去的数组名其实是数组首元素的地址。
假如有一个一维数组、一个二维数组,分别为:

int arr[10];
char ch[3][5];

此时有一个test1的函数,要给这个函数传参。

test1(arr);

//形参数数组
void test1(int arr[10])
{
	
}
//或者
void test1(int arr[])
{
	//这个一维数组的长度10科协可不写
}
//形参是指针的形式
void test1(int *arr)
{
	
}

假设现在还有一个函数是test2函数,它要调用二维数组ch

test2(ch);//函数调用
//函数定义
void test2(char arr[3][5])
{

}
//或者向下面这样去定义
void test2(char arr[][5])
{
	//二维数组的行数可以省略,但是列数不能省略
}

这个地方的形参也可以是指针。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:19:47  更:2022-07-21 21:22:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 22:56:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码