数据结构day1(2023.7.13)

news2024/11/26 2:29:17

一、Xmind整理:

 

二、课上练习:

 练习1:static(全局变量、局部变量作用域)

int a=0;//全局变量 生命周期和作用于都是从定义开始到整个文件结束
void fun()
{
int b=0;//局部变量
static int c=0;//局部变量 作用于:在fun函数使用
printf("&c=%p\n",&c);
a++;
b++;//1 1
c++;//1 2 3
    printf("a=%d\n",a);//1 2 3
    printf("b=%d\n",b);//1 1 1
    printf("c=%d\n",c);//1 2 3
}
int main(int argc, const char *argv[])
{
    fun();
    fun();
    fun();
    printf("c=%d\n",c);
    return 0;
}

 练习2:判断变量处于用户空间的哪个区

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int a=10;//全局 已经初始化  在.data段
int b;//全局 未初始化  在.bss段

const int c=10;//sonst修饰的全局变量在.ro
char str[]="hello"//全局  初始化str在.data  
            //"hell0"  在.ro段,
            //字符串hello赋值一份给str
            //可以修改
char *p="hello"//全局  p在.data段
            //hello在.ro段a
            //p指向只读段的hello常亮的首地址
int *p=(int *)malloc(100);//报错 全局不可以调用函数
static int d;//静态区 未初始化 .bss段
static int e=10;//静态去  初始化 .data段

int main(int argc, const char *argv[])
{
static int d;  //静态局部变量 静态区 未初始化 .bss段
static int e=10; //静态局部  初始化 .data段
int a=10; //栈区
int b; //栈区
const int c=10;//const修饰的局部变量在栈区
char str[]="hello"//str:栈区  hello只读段

char *p="hello"//p在栈区  
int *p=(int *)malloc(100);//p在栈区  100在堆区

    return 0;
}

 练习3:在堆区申请连续的n个空间,实现循环输入,循环输出 、释放空间

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*
 * function:    申请空间
 * @param [ in] 
 * @param [out] 
 * @return      返回地址
 */
int *create(int n)
{
	int *p=(int *)malloc(sizeof(int)*n);
	if(p==NULL)
		return NULL;
	return p;
}

/*
 * function:    循环输入
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void Input(int n,int *p)
{
	for(int i=0;i<n;i++)
	{
		scanf("%d",p+i);
	}

}
/*
 * function:    循环输出
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void Output(int n,int *p)
{
	for(int i=0;i<n;i++)
	{
		printf("%d\t",*(p+i));
	}

}
/*
 * function:    释放空间
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int * free_space(int *p)
{
	if(p==NULL)
		return NULL;
	free(p);
	p=NULL;
	return p;
}
int main(int argc, const char *argv[])
{
	/*
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	int *p=(int *)malloc(sizeof(int)*n);

	for(int i=0;i<n;i++)
	{
		scanf("%d",p+i);
	}

	for(int i=0;i<n;i++)
	{
		printf("%d\t",*(p+i));
	}

	free(p);
	p=NULL;*/

	int n;
	printf("please enter n:");
	scanf("%d",&n);
	int *p=create(n);
	
	Input(n,p);

	Output(n,p);

	p=free_space(p);

	return 0;
}

 练习4:数据定义与数据类型

数据定义
int a;
int arr[3];
int arr[3][4];
char str[];
char str[][];
int *p
int **p
int *p[];
int (*p)[]
int *p(void)
int (*p)(void)
int (*p[])(void)
数据类型
int ;
int [3];
int [3][4];
char [];
char [][];
int *
int **
int *[];
int (*)[]
int *(void)
int (*)(void)
int (*[])(void)
typedef 数据类型结合
typedef int size_4;//size_4是类型名int
typedef int arr_t[3] ;//arr_t是int [3]的类型名
typedef int arr[3][4];//arr是int [3][4]的类型别名
typedef char str[];
typedef char str[][];
typedef int *p
typedef int **p
typedef int *p[];
typedef int (*p)[]
typedef int *p(void)
typedef int (*p)(void)//p函数指针类型名
typedef int (*p[])(void)

 练习5:typedef小练 

typedef int size_4;
typedef int arr_t[4];//arr_t--->int [4]
int main(int argc, const char *argv[])
{
    int a=100;
    size_4 b=99;
        printf("b=%d\n",b);
    
    arr_t brr;
        arr_t arr={11,22,33,44};//int arr[4]
        for(int i=0;i<4;i++)
        {
          printf("%d\t",arr[i]);
        }
        arr_t brr[5]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0};
        for(int i=0;i<4;i++)
        {
        for(int j=0;j<5;j++)
        {
            printf("%d\t",brr[i][j]);
        }
        printf("\n");
        }
    return 0;
}

三、课后作业:

定义字符指针,分别指向堆区空间,计算字符串的长度

要求:

1.定义函数实现堆区空间申请

2.在主函数中实现输入字符串

3.定义函数实现字符串长度 size_t my_strlen(const char *s)

4.定义函数释放堆区空间

head.h:

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *create(int n);
void Input(char *p);
size_t my_strlen(const char *s);
void Output(int count);
char *free_space(char *p);

#endif

main.c: 

#include "head.h"
int main(int argc, const char *argv[])
{
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	char *p=create(n);
	Input(p);
	int count=my_strlen(p);
    Output(count);
	p=free_space(p);
}

test.c:

#include "head.h"
/*
 * function:申请空间    
 * @param [ in] 
 * @param [out] 
 * @return  返回地址
 */
char *create(int n)
{
	char *p=(char *)malloc(sizeof(char)*n);
		if(p==NULL)
			return NULL;
	return p;
}
/*
 * function:循环输入    
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void Input(char *p)
{
	scanf("%s",p);
}
size_t my_strlen(const char *s)
{
	int count=0;
	for(int i=0;*(s+i)!='\0';i++)
	{
		count++;
	}
	return count;
}
/*
 * function:循环输出
 * @param [ in]
 * @param [out]
 * @return
 */
void Output(int count)
{
	printf("字符串的长度为%d\n",count);
}
/*
 * function:    释放空间
 * @param [ in]
 * @param [out]
 * @return
 */
char *free_space(char *p)
{
	if(p==NULL)
		return NULL;
	free(p);
	p=NULL;
	return p;
}

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

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

相关文章

智头条|第25届中国建博会(广州)成功举行,马斯克组建xAI公司

行业动态&#xff1a; 第25届中国建博会&#xff08;广州&#xff09;成功举行 7月8日至11日期间&#xff0c;2023中国建博会(广州)暨首届广州卫博会在广州如火如荼地进行。本届展会以“冠军企业首秀平台”为定位&#xff0c;以“建装理想家&#xff0c;服务新格局”为主题&a…

我的创作纪念日——创作的第2048天

创作机缘 今天收到私信&#xff0c;在CSDN已经7年码龄&#xff0c;创作2048天了&#xff0c;刚开始写作的时候似乎还是在大二&#xff0c;那个懵懂无知的年纪&#xff0c;也是在那个时候开始接触开发&#xff0c;接触编程。 之后便是无尽的探索与尝试&#xff0c;没有明确的发…

DuiLib的消息传递机制

前言 学会了怎么写XML文件&#xff0c;但是我还是不知道怎么实现各个控件之间的消息传递。于是我对源代码好好研究了一下&#xff0c;发现duilib作为一个界面库有自己独立的封装的窗口类,也就是WindowsImplBase。 在这个类中&#xff0c;实现对windows窗口传过来的消息的处理…

【每日一题】2673. 使二叉树所有路径值相等的最小代价

【每日一题】2673. 使二叉树所有路径值相等的最小代价 2673. 使二叉树所有路径值相等的最小代价题目描述解题思路 2673. 使二叉树所有路径值相等的最小代价 题目描述 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#…

前端day06笔记

数组遍历 for let i in 数组名 函数 没有return返回的是underfined var是全局作用域 匿名函数 具名函数 值传递 引用传递 arguments:接实参 箭头函数 递归 闭包 对象的增删改查 对象的遍历 数组对象 获取数组对象 内置对象 从2-10

保险企业如何做好数据安全合规与敏感数据保护

监管部门多次“重拳出击”&#xff0c;保险企业如何做好敏感数据保护工作&#xff1f; 继《个人信息保护法》、《中华人民共和国消费者权益保护法》、《中国银保监会办公厅关于印发银行保险机构信息科技外包风险监管办法的通知》、《互联网保险业务监管办法》等相关法规之后&am…

CNN从搭建到部署实战(pytorch+libtorch)

模型搭建 下面的代码搭建了CNN的开山之作LeNet的网络结构。 import torchclass LeNet(torch.nn.Module):def __init__(self):super(LeNet, self).__init__()self.conv torch.nn.Sequential(torch.nn.Conv2d(1, 6, 5), # in_channels, out_channels, kernel_sizetorch.nn.Sig…

mysql 第三章

目录 1.索引 2.事务 3.总结 1.索引 2.事务 3.总结 事务是一种机制&#xff0c;一个操作序列。包含了一组数据库操作命令。

静态数码管——FPGA

文章目录 前言一、数码管1、数码管简介2、共阴极数码管or共阳极数码管3、共阴极与共阳极的真值表 二、系统设计1、模块框图2、RTL视图 三、源码1、seg_led_static模块2、time_count模块3、top_seg_led_static(顶层文件) 四、效果五、总结六、参考资料 前言 环境&#xff1a; 1、…

大学生用一周时间给麦当劳做了个App(微信小程序版)

背景 有个大学生粉丝最近私信联系我&#xff0c;说基于我之前开源的多语言项目做了个仿麦当劳的项目&#xff0c;虽然只是个样子货&#xff0c;但是收获颇多&#xff0c;希望把自己写的代码开源出来供大家一起学习进度。这个小伙伴确实是非常积极上进&#xff0c;很多大学生&a…

MySQL数据库(三)

前言 聚合查询、分组查询、联合查询是数据库知识中最重要的一部分&#xff0c;是将表的行与行之间进行运算。 目录 前言 一、聚合查询 &#xff08;一&#xff09;聚合函数 1、count 2、sum 3、avg 4、max 5、min 二、分组查询 &#xff08;一&#xff09;group by …

Docker架构

目录 Docker总架构图Docker ClientDocker DaemonDocker ServerDocker EngineJob Docker RegistryGraphDriverGraphDriverNetworkDriverExecDriver LibcontainerDocker Container Docker可以帮助用户在容器内部快速自动化部署应用&#xff0c;并利用Linux内核特性命名空间&#…

微软将推出更多Edge特有功能,与Chrome展开竞争

微软在 2018 年宣布将推出基于 Chromium 构建的 Edge 浏览器&#xff0c;并于 2020 年 1 月推出了新版 Edge。如今时隔三年&#xff0c;根据统计 Edge 全平台的市场占有率仅为 4.23%&#xff0c;如果只考虑桌面端的话&#xff0c;Edge 的市场占有率则是 10.98%&#xff0c;这两…

系统设计蓝图 / 备忘单

开发一个强大、可扩展和高效的系统可能会令人望而却步。然而&#xff0c;了解关键概念和组件可以使这个过程更可管理。在本博客文章中&#xff0c;我们将探讨系统设计的关键概念和组件&#xff0c;如DNS、负载均衡、API网关等&#xff0c;以及一个简明的备忘单&#xff0c;可以…

inux运维面试题(二)之系统管理类面试题

Linux运维面试题&#xff08;二&#xff09;之系统管理类面试题 1.权限优化1.1 简述Linux权限划分原则文件基本权限默认权限特殊权限sudo授权文件系统属性权限 解答 2.备份策略2.1需要备份的内容备份策略备份频率备份存储位置 2.2网站服务器每天产生的日志数量较大&#xff0c;…

LLM - 读取 Lora 模型进行文本生成

目录 一.引言 二.Lora 模型文本生成 1.模型读取 1.1 AutoModelForCausalLM.from_pretrained 1.2 PeftModel.from_pretrained 2.文本生成 2.1 Tokenizer 2.2 model.generate 3.输出实践 三.总结 一.引言 前面介绍了使用 Baichuan7B 从样本生成到 Lora 模型微调和存储…

磁盘擦写次数计算

1.让机器能有外网 2,安装工具 sudo apt-get install smartmontools 3,输入查询命令 sudo smartctl -x /dev/sda |egrep Device Model|User Capacity|Sector Size|173|Logical Sectors Written|Percentage Used Endurance Indicator 4,计算擦写次数 计算方法&#xff1a;25…

hadoop启动无法启动datanode或者namenode

首先进入hadoop安装目录下例如&#xff1a; 再进入dfs目录下&#xff0c;没有出现在hdfs-site.xml配置的data或者name cd data/current vim VERSION 打开VERSION文件复制&#xff1a;clusterID下的内容 将内容复制到name中的VERSION。再进行重启Hadoop

常见的前端安全以及常规安全策略

1、CSRF&#xff1a;跨站请求伪造&#xff08;Cross-site request forgery&#xff09;&#xff1b; 原理&#xff1a; &#xff08;1&#xff09; 用户C打开浏览器&#xff0c;访问受信任网站A&#xff0c;输入用户名和密码请求登录网站A&#xff1b; &#xff08;2&#xff…

mapping文件目录生成修改

参考文章&#xff1a; gradle编译完成Copy mapping文件 - 简书 (jianshu.com) 第一步&#xff1a;在app的build.gradle中做如下配置&#xff1a; android {android.applicationVariants.all {variant ->def buildType variant.buildType.nametasks.all {def mappingDir …