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

C语言笔记02

getchar() putchar() 只对单个字符进行输入输出

多分支语句:
可以对多种特殊情况进行处理;
if写法:
if(判断条件)
{
代码块;
}
else if(判断条件)
{
代码块2}
...
else
{
代码块;
}

//特别注意else会与最近的if进行搭配

switchswitch(整形变量)
{
case 整形常量:代码块;breakcase...
default:代码块;break}
根据整形变量的值去找对应的case去执行
注意:case后常量不能一样,不加break从找到的case开始向后一直执行;

应用场景:
if多分支应用场景:判断条件为一个范围
switch:判断条件更加精确的时候

部分习题

#include<stdio.h>
int main()
{int a,b=0,i=1;scanf("%d",&a);while(a){b+=(a%2)*i;a/=2;i*=10;}printf("%d\n,b);return 0;
}

计算X年X月X日是哪一天

#include <stdio.h>
int main(int argc, char *argv[])
{
int year,mouth,day;
int count = 0;
scanf("%d.%d.%d",&year,&mouth,&day);
switch(mouth){
case 12:
count+=day;
day = 30;
case 11:
count+=day;
day = 31;
case 10:
count+=day;
day = 30;
case 9:
count+=day;
day = 31;
case 8:
count+=day;
day = 31;
case 7:
count+=day;
day = 30;
case 6:
count+=day;
day = 31;
case 5:
count+=day;
day = 30;
case 4:
count+=day;
day = 31;
case 3:
count+=day;
if((year%4==0&&year%100!=0)||year%400==0)
{
day = 29;
}else{
day = 28;
}
case 2:
count+=day;
day = 31;
case 1:
count+=day;;
}
printf("今天是今年的第%d天\n",count);
return 0;
}

99乘法表

#include <stdio.h>int main(int argc, char *argv[])
{ for(int i=1;i<=9;i++){for(int j =1;j<=i;j++){printf("%dX%d=%d\t",i,j,i*j);}printf("\n");}return 0;
}

在这里插入图片描述
void value not ignored as it ought to be

这是GCC的错误信息,意思是 一个函数Function的return的类型是void ,但你却尝试把这个函数返回的值赋给非void类型的变量。

注意
memset 一般只能用来给特定的字符数组赋值 或者是数组清零
它接受三个参数:一个指向内存区域的指针、要设置的特定值和要设置的字节数。该函数可以将指定内存区域设置为特定值,常用于对新分配的内存进行初始化,以确保数据的一致性和安全性。

memset(目标内存指针,要设置的值,要设置的字节数)

memset函数的主要功能是将一段内存区域设置为指定值 [4]。具体来说,memset函数通过接收三个参数:目标内存指针str、要设置的值c和要设置的字节数n,可以完成以下任务:

  1. 设置内存区域的值:函数将str指针指向的内存区域的前n个字节都设置为指定值c。在实际操作中,c的值会被转换为unsigned char类型,并且只有其低8位会被使用。
  2. 初始化内存:由于memset能够迅速地将内存区域设置为特定值,因此它常常被用于初始化新分配的内存块。例如,可以将内存块清零或设置为某个特定值。
  3. 清空内存区域:通过将c设置为0,memset可以用来清空一段内存区域即将所有字节设置为0。这在释放内存之前清理数据结构或避免内存泄漏时特别有用。
  4. 快速设置内存区域的值:当需要快速将内存区域设置为某个特定值时,memset提供了一种高效的方法。相比于使用循环逐个设置字节,memset通常能够更快地完成任务。
    总之,memset函数是一个高效的内存操作工具,它能够快速地将内存中的连续字节初始化或设置为特定的值 [5]。它特别适用于将内存区域清零或设置为非零默认值,这在内存分配后初始化和内存释放前清理数据时非常有用。此外,由于其通常由编译器优化,memset在执行速度上通常优于手动循环设置字节的操作。

Linux低地址存高位
在Linux系统中,数据的存储方式可以是大端序(Big-Endian)或小端序(Little-Endian),这取决于系统的架构。

基本概念
大端序(Big-Endian):数据的低位字节保存在内存的低地址端,而数据的高位字节保存在内存的高地址端。这种存储方式类似于我们平时书写数字的习惯,先写高位再写低位。
小端序(Little-Endian):数据的低位字节保存在内存的高地址端,而数据的高位字节保存在内存的低地址端。这种存储方式与我们的书写习惯相反。
Linux系统中的情况
Linux系统本身并不规定必须是大端序或小端序,而是根据其运行的硬件平台来决定。常见的Linux系统架构如x86(Intel/AMD)是小端序,而一些ARM架构的Linux系统可以是大端序或小端序,具体取决于配置。

记录个蛮有趣的错误 下面就是

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{ char* str=(char*)malloc(sizeof(char)*10);printf("%p\n",str);str="hello";//str errorprintf("%p\n",str);printf("%s\n",str);printf("%p\n",str);free(str);str = NULL;printf("111111\n");return 0;
} 

在这里插入图片描述
问题出在str=“hello”; 这条语句上 因为str是自己申请分配空间 但是却定向指定了一个常量区
出现了地址变更 当free函数执行时候就会出现段错误 正确做法是使用strcpy函数对str赋值
修改后

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{ char* str=(char*)malloc(sizeof(char)*10);printf("%p\n",str);//str="hello";//str errorstrcpy(str,"hello");printf("%p\n",str);printf("%s\n",str);printf("%p\n",str);free(str);str = NULL;printf("111111\n");return 0;
} 

在这里插入图片描述

http://www.dtcms.com/a/300678.html

相关文章:

  • 【Oracle】套接字异常(SocketException)背后隐藏的Oracle问题:ORA-03137深度排查与解决之道
  • 【代码问题】【包安装】MMCV
  • SCUDATA esProc SPL Enterprise Edition(大数据计算引擎) v20250605 中文免费版
  • 【前后端】node mock.js+json-server
  • 第四科学范式(数据密集型科学):科学发现的新范式
  • hackthebox-Pwn-You know 0xDiablos(ret2text)
  • 详解删除链表的倒数第k个结点:双指针法优化与边界处理
  • SpringAI入门及浅实践,实战 Spring‎ AI 调用大模型、提示词工程、对话记忆、Adv‎isor 的使用
  • [spring6: Mvc-异步请求]-源码分析
  • 《 接口日志与异常处理统一设计:AOP与全局异常捕获》
  • 数据结构 堆(4)---TOP-K问题
  • 详解力扣高频SQL50题之1164. 指定日期的产品价格【中等】
  • 【element-ui】HTML引入本地文件出现font找不到/fonts/element-icons.woff
  • Reason-before-Retrieve(CVPR 2025)
  • 网易大模型算法岗面经80道
  • Vim 编辑器工作模式及操作指南
  • ksql连接数据库免输入密码交互
  • Spring Boot + @RefreshScope:动态刷新配置的终极指南
  • C#中Visual Studio平台按照OfficeOpenXml步骤
  • Pinocchio 结合 CasADi 进行 IK 逆运动学及 Mujoco 仿真
  • 【嵌入式硬件实例】-555定时器调光电路实现
  • Java大数据面试实战:Hadoop生态与分布式计算
  • 数据赋能(340)——技术平台——共享平台
  • 不坑盒子:Word里1秒制作“花括号”题目,多音字组词、形近字组词……
  • 零基础学习性能测试第五章:求最佳线程数
  • MySQL 8.0.42创建MGR集群
  • 元宇宙中的“虫洞“:技术实现、应用场景与未来挑战
  • Dify v1.6.0:支持MCP了,为更顺畅的交互打开了大门
  • 【Linux系列】nproc
  • CPA-7-资产减值