c语言record的作用,C语言基础 record 2-指针,结构体,链表,文件的输入输出

指针:

1.指针的概念:

内存区的每一个字节有一个编号,这就是 ‘地址’,由于通过地址能找到所需的变量单元,而地址指向该变量单元,所以将地址形象化称为 ‘指针’。C/C++中是可多继承的指针,而Java中是单继承指针。

2.为什么要用指针?

解决跨区域(不同作用域,不同代码块)之间的数据交互。

3.指针变量:

如果有一个变量专门用来存放另一变量的地址(即指针),则它称为 ‘指针变量’。指针变量的值是地址(即指针)。指针变量本身在内存里面占据8个字节。

注意⚠️:指针是一个地址,而指针变量是存放地址的变量。

4.怎样定义和使用指针变量:

“&” :取地址运算符。&a 是变量a的地址。

“” :指针运算符(或称‘间接访问’ 运算符),p代表指针变量p指向的对象

(1)定义指针变量的一般形式为:

类型名 * 指针变量名;

eg: int *point_1, *point_2;

注意⚠️:定义指针变量时必须指定基类型。可以在定义指针变量时同时对它初始化

(2)一个变量的指针的含义包括两个方面:

一是以存储单元编号表示的纯地址(如编号为2000的字节);一是它指向的存储单元的数据类型(如 int,char,float等)。

注意⚠️:指针变量中只能存放地址(指针),不能将一个整数赋给一个指针变量。地址只能用地址符 “&” 得到并赋给一个指针变量。

eg:

float b =20;

int c = 10;

int *a=b;❌ 指针变量只能存地址,不能存具体值

int *a=&b;❌整型指针只能存整形数据的地址

int *a = &c;✔️

float *d = NULL;NULL指向内存的起始地址 0x00

(3)数组和指针的关系:

数组名并不是一个变量 ,没有分配内存空间。 而指针变量有内存空间。

(4)指针实际使用:

a. 定义一个数组,系统会为其分配内存空间,可以存值

int num[10]={0};

b. 定义一个指针变量,系统只为变量本身分配8个字节内存空间,但无法存值,因为系统没有为其分配可赋值的内存空间

int *p;

c. 如果想给指针指向的区域赋值

//1.指针变量已经指向某块区域

d1cf597973ae?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Xnip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你提供一个简单的游戏示例:猜数字游戏。 游戏规则如下: 1. 程序随机生成一个 1-100 之间的整数。 2. 玩家有 10 次机会猜测该数字,每次猜测后程序会告诉玩家猜的数字是大于还是小于答案。 3. 如果玩家在 10 次内猜中了答案,游戏结束并提示胜利;如果 10 次内没有猜中,游戏结束并提示失败。 接下来是代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> // 定义链表结构体 struct record { int round; // 猜数字的轮数 int guess; // 玩家猜的数字 char result[10]; // 猜测结果,"大于"或"小于" struct record *next; // 指向下一个节点 }; // 定义全局变量 int answer; // 答案 int round; // 当前轮数 struct record *head = NULL; // 链表指针 // 函数声明 void generateAnswer(); // 生成答案 void playGame(); // 玩猜数字游戏 void saveRecord(int guess, char *result); // 保存猜测记录到链表 void showHistory(); // 显示猜测记录 void saveToFile(); // 将猜测记录保存到文件 void loadFromFile(); // 从文件中加载猜测记录 int main() { int choice; srand(time(NULL)); // 初始化随机数种子 loadFromFile(); // 加载以前的猜测记录 do { printf("=== 猜数字游戏 ===\n"); printf("1. 开始新游戏\n"); printf("2. 查看猜测记录\n"); printf("3. 退出游戏\n"); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 1: generateAnswer(); // 生成答案 playGame(); // 玩猜数字游戏 saveToFile(); // 将猜测记录保存到文件 break; case 2: showHistory(); // 显示猜测记录 break; case 3: printf("谢谢游玩!\n"); break; default: printf("无效操作!\n"); break; } } while (choice != 3); return 0; } void generateAnswer() { answer = rand() % 100 + 1; round = 1; } void playGame() { int guess; printf("=== 第%d轮 ===\n", round); printf("猜一个 1-100 之间的整数:"); scanf("%d", &guess); while (guess != answer && round < 10) { if (guess > answer) { printf("猜大了!\n"); saveRecord(guess, "大于"); // 保存猜测记录到链表 } else { printf("猜小了!\n"); saveRecord(guess, "小于"); // 保存猜测记录到链表 } round++; printf("=== 第%d轮 ===\n", round); printf("猜一个 1-100 之间的整数:"); scanf("%d", &guess); } if (guess == answer) { printf("恭喜你猜对了!\n"); } else { printf("很遗憾,你没有猜中。正确答案是%d。\n", answer); } } void saveRecord(int guess, char *result) { // 创建新节点 struct record *newRecord = (struct record*)malloc(sizeof(struct record)); newRecord->round = round; newRecord->guess = guess; strcpy(newRecord->result, result); newRecord->next = NULL; if (head == NULL) { // 如果链表为空,添加为头节点 head = newRecord; } else { // 否则添加到末尾 struct record *p = head; while (p->next != NULL) { p = p->next; } p->next = newRecord; } } void showHistory() { if (head == NULL) { // 链表为空,没有猜测记录 printf("没有猜测记录。\n"); } else { printf("猜测记录:\n"); struct record *p = head; while (p != NULL) { // 遍历链表,打印每个节点的信息 printf("第%d轮,猜%d,结果:%s\n", p->round, p->guess, p->result); p = p->next; } } } void saveToFile() { FILE *fp = fopen("guess_history.txt", "w"); // 以写入方式打开文件 if (fp == NULL) { // 文件打开失败 printf("无法保存猜测记录到文件!\n"); } else { struct record *p = head; while (p != NULL) { // 遍历链表,将每个节点的信息写入文件 fprintf(fp, "%d %d %s\n", p->round, p->guess, p->result); p = p->next; } fclose(fp); // 关闭文件 printf("猜测记录已保存到文件!\n"); } } void loadFromFile() { FILE *fp = fopen("guess_history.txt", "r"); // 以读取方式打开文件 if (fp == NULL) { // 文件不存在,无需加载 return; } char line[20]; while (fgets(line, sizeof(line), fp) != NULL) { // 从文件中读取每行数据 int round, guess; char result[10]; sscanf(line, "%d %d %s", &round, &guess, result); // 解析数据到变量中 saveRecord(guess, result); // 将数据添加到链表中 } fclose(fp); // 关闭文件 printf("猜测记录已从文件中加载!\n"); } ``` 在这个示例中,我们使用了结构体来定义猜测记录,链表来保存猜测记录,二维数组和文件来实现猜测记录的读写。当然,这只是一个简单的示例,你可以根据自己的兴趣和需求来设计更加复杂的游戏和数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值