C语言小记

news/2025/3/6 19:50:05/文章来源:https://www.cnblogs.com/zy999/p/18756281
int a =10;
int b=3;
int c= pow(10,3);
//表示10的三次方
unsigned 表示不用补码表示
//数字的输入,%d 包括 char,short,int%u unsigned%ld long long%lu unsigned long long输入 float 是 %f   double 是 %lf     shuchu dou shi %f保留小数的话是大于5才入,小于等于5舍去

强制转换

(int) 1.67 (short)213 等等

短路

如果&&左边为false,则&&右边不执行。如果||左边为true,则右边不执行。

定义函数

image-20250226110956652

是这样的,下面这个是不返回值的(可以返回一个或0个值)

void 函数名(定义函数的接收变量){

​ 巴拉巴拉

}

int max(int a,int b){int ret;if(a>b){ret=a;}else{ret=b;}return ret;
}//带返回值的函数,函数名前面是int,所以返回的值是int类型,就是说这个函数使用后,他代表函数值.return的作用是,1结束函数,2返回数值

image-20250226114523877

第一行是函数声明,就是告诉c有这么一个函数,当然,如果定义的函数再main函数前,则不需要声明

关于函数的输入

image-20250226170150576

1.函数传进去的只是值,不是这个变量。2. 每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系,就算是字母一样也没有关系。 3. 函数使用完成后,当次的变量空间就消失了,另外变量空间中的变量称之为本地变量。

  1. 语句里也有变量空间,这个函数函数的空间还不太一样,因为语句里的变量空间中,可以用语句之外的变量

    if(a<b){int i =1;
    }//这里if语句里的大括号里,每次执行完,里面的变量i都会消失,也可以这么理解,属于大括号里的参数,如果执行完这个大括号,那么这个大括号里面的参数也就自然消失了

    字符输入函数

```cgets(char*a);char a[100];gets(a);

gets() 函数存在严重的安全隐患,因为它不会检查输入字符串的长度,也不会限制读取的字符数量。如果用户输入的字符串长度超过了字符数组的大小,就会导致缓冲区溢出,可能会覆盖相邻的内存区域,从而引发程序崩溃、数据损坏甚至安全漏洞(如恶意代码注入)。

本地变量规则

image-20250226172039460

image-20250226180309770

数组

集成初始化

int a[]={1,2,3,4,5,6,7,8,9};
//固定位置赋值

数组作为参数

image-20250228154009553

必须再用另一个参数来传入数组的大小。

指针那里会学

search(x,a,sizeof(a)/sizeof(a[0]))//后面那一串代表长度,sizeof(a)是数组的大小,sizeof(a[0])是单个元素的大小,所以一除就是数组的长度

如果找到了,则返回x在数组中的位置,找不到则返回-1

指针

之前定义函数,函数接收主函数的变量的值之后,就不会与原变量有任何关系

但是当函数接受的是变量的地址之后,就有关系了,可以通过接收的地址,去改变地址里的值,也就是变量的值

int *p;
//即定义了指针p
*p=1;
//*p是p指针所指向的地址里面的值,也就是相当于变量,可以赋值,什么的

整数型指针加1,地址是加四的,因为4个地址才能存放一个整数类型。所以要加四,才能跳到下一个整数开头地址

*p++,其中++的优先级要高于 *

字符串

定义方式 每个字符串后面其实都有一个\0;其意义代表字符结束

定义方式

char a="hello";
char a[]="hello";
char *a="hello";//指针相当于数组,但是用指针代表字符数组是他默认是定义了,const类型的,就是只能读不可写的状态,而且如果定义字符串,如果一个字符串分别给两个指针进行定义,则这两个指针地址都是一样的。因为没有开辟新的一样的字符串

scanf9(“%7s”,string);表示只能输入7个字符

其他的函数

strchr(char *a,char c);
从左开始寻找字符c在字符数组里面的地址,他返回的是地址
strrchr 则是从右开始寻找
strstr(char *s1,char *s2);
寻找字符串在哪个位置
strcasestr(char *s1,char*s2);这个忽略了大小写
strlen(char *a);数字符串的长度,但是不带\0
strcmap(char*a,char*b);是比较两个字符串的大小,相等的话,返回0,小于返回-1,否则返回+1
strcpy(char*a,char*b);把b字符串copy到a;
(int*/char*)malloc(长度),用于动态分配地址,用完还需要还回去

关于输出

printf(“%s”,a);

printf 会从这个a这个字符数组起始地址开始,逐个读取字符并输出到标准输出,直到遇到字符串结束符 '\0' 为止。

在这个过程中,printf 函数内部会使用一个临时指针来遍历字符串,但这个操作不会影响作为参数传入的 a 本身。

还有字符串虽然是指针,但是 是特殊的指针,不能进行指针位置的加减

char *a=“lll”;是在存储空间里开辟地址,然后赋值a,但是a仍可以通过a[2]访问l,a[2]本质是指针在移动

  1. 对于字符数组访问元素的本质
    • 当有一个字符数组char a[] = "ll";时,使用a[2]来访问元素,在底层实现上确实和指针运算有关。a[2]等价于*(a + 2)。这里的a在大多数表达式中会 “退化” 为指向数组首元素的指针。
    • 但是,这里的关键区别在于数组名a本身是一个常量指针。它代表数组首元素的地址,这个地址在数组的生命周期内是固定不变的。
  2. 与指针变量的对比
    • 对于char *a = "ll";这种指针变量,a是一个可以被修改的指针。可以通过a++等操作让它指向不同的内存位置。
    • 而对于字符数组char a[] = "ll";,不能进行a++这样的操作来改变数组名a所代表的地址。例如,下面的代码是错误的:

字符输出用%s还是%c

//对于字符串用s,例如
char a[10]={0};
printf("%s",a);
printf("%c",a[0]);
//简单来说就是,单个字符用c,带\0结尾的用%s

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统流程图联系

练习题一:图书馆借阅管理系统流程图绘制 背景说明:在学校图书馆借阅管理系统中,学生借阅图书需要经过一系列流程。首先,学生携带校园卡前往借阅处,工作人员通过刷卡设备读取学生信息,系统验证学生身份是否有效。若身份无效,系统提示原因(如校园卡过期、欠费等)。若身份…

推荐4本专著《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》书,非常感谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

SAS 9.4软件下载与安装教程

1、安装包 扫描下方二维码关注「软知社」,后台回复【043】三位数字即可免费获取分享链接,无广告拒绝套路;2、安装教程双击setup.exe安装,弹窗安装对话框简体中文,点击确定默认选择,点击下一步指定SAS安装主目录,选择C盘之外磁盘,点击下一步选择第二个,安装SAS Foundat…

MyBatis与其使用方法讲解

ORM在讲解Mybatis之前,我们需了解一个概念ORM(Object-Relational Mapping)对象关系映射,其是数据库与Java对象进行映射的一个技术.通过使用ORM,我们可以不用编写负责的Sql语句,而是通过操作对象来实现增删改查操作缺优分析优点提高开发效率,减少代码的重复性和维护成本 增加代码…

系统流程图

1.图书馆借阅管理系统流程图: 背景说明:在学校图书馆借阅管理系统中,学生借阅图书需要经过一系列流程。首先,学生携带校园卡前往借阅处,工作人员通过刷卡设备读取学生信息,系统验证学生身份是否有效。若身份无效,系统提示原因(如校园卡过期、欠费等)。若身份有效,学生…

基于Microsoft.Extensions.AI核心库实现RAG应用

本文介绍了如何基于Microsoft.Extensions.AI + Microsoft.Extensions.VectorData 一步一步地实现一个RAG(检索增强生成)应用,相信会对你有所帮助。如果你也是.NET程序员希望参与AI应用的开发,那就快快了解和使用基于Microsoft.Extensioins.AI + Microsoft.Extensions.Vecto…