C语言基础入门详解一

news2024/11/6 7:27:46

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。
👉点击跳转到教程

前言:

初识C语言

//#include 相当于java的import,stdio全称:standard input$output 标准的输入输出 .h头文件的后缀,包含一些函数 
#include <stdio.h> 
//导入的标准的C语言函数库 
#include <stdlib.h> 
main() //相当于Java的public static void main(String[] args) 
{//函数的开始 
	printf("hello,world! \n"); //printf(内容)输出函数,相当于Java的System.out.println("hello,world!"); \n是回车换行 
	system("calc"); //调起计算器
	system("mspaint"); //调起画板
	system("services.msc");//调起服务 
	system("java Hello"); //调用字节码 
	system("pause"); //让docs命令行执行pause命令,作用是控制台停留。 
}//函数的结束 

一、C语言基本数据类型详解

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

/**
	C语言基本类型
	char,int,float,double,long,short,signed,unsigned,void
	计算机类型的长度:sizeof("类型") 返回int类型的长度
	占位符:%d
	printf("内容"); 
	
	Java数据类型和C语言基本数据类型的区别:
	1.Java中char类型的长度为2个字节,C语言中的长度为1个字节 
	2.Java中long类型的长度为8个字节,C语言中的长度为4个字节
	C99标准:long类型的规定,不小于整形。
	3.C语言中没有byte
	4.C语言中没有boolean类型,0表示false,非0表示true 
	5.signed:有符号:-128~127 =-2^7~2^7-1 
	6.unsiged:无符号:0~255  =0~2^8-1
 	7.void:无类型,代表任意类型	
**/
main()
{
	printf("int类型的长度为:%d\n",sizeof(int));
	printf("char类型的长度为:%d\n",sizeof(char));
	printf("float类型的长度为:%d\n",sizeof(float));
	printf("double类型的长度为:%d\n",sizeof(double));
	printf("long类型的长度为:%d\n",sizeof(long));
	printf("short类型的长度为:%d\n",sizeof(short));
	printf("signed类型的长度为:%d\n",sizeof(signed));
	printf("unsigned类型的长度为:%d\n",sizeof(unsigned));
	printf("void类型的长度为:%d\n",sizeof(void));
	
	if(-1){
		printf("true\n");
	} else{
		printf("false\n");
	}
	system("pause");		
} 

输出到控制台内容如下:

在这里插入图片描述
二、C语言输出函数详解

#include<stdio.h>
#include<stdlib.h>
/**
输出函数
printf("你要输出的内容");
%d  - int
%ld - long int
%c - char
%f - float
%u - 无符号数 
%hd - 短整型 
%lf - double
%x - 十六进制输出int,或者long int 或者short int
%o - 八进制输出
%s - 字符串 

printf("你要输出的内容对应的占位符");
在C语言中,默认保留小数点后6位 
要想保留对应的位数,就需要在百分号后边加上,.数字 

十进制:12345678 
二进制 101111000110000101001110
               0110000101001110
               
不同的类型,要用不同的占位符去输出,否则精度丢失 
*/ 
main(){
	char c = 'A';
	int i=12345678;
	long l=123456789;
	float f =3.1415;
	double d = 3.1415926535;
	printf("c==%c\n",c); 
	printf("i==%d\n",i); 
	printf("l==%ld\n",l); 
	printf("f==%.3f\n",f); 
	printf("d==%.9lf\n",d); 
	
	printf("i==%hd\n",i);
	
	//C语言的数组的括号不能写在左边 
	char cArray[]={'A','B'}; 
	printf("cArray的内存地址==%#x\n",&cArray);
	
	char* text="I love you";
	
	printf("cArray的内容==%s\n",text);
	system("pause");
} 

输出到控制台内容如下:

在这里插入图片描述
三、C语言输入函数详解

1.输入函数.c文件

#include<stdio.h>
#include<stdlib.h>
/**
输入函数
scanf("占位符",内存地址)

%d  - int
%ld  - long int
%c  - char
%f  - float
%u  - 无符号数 
%hd  - 短整数
%lf  - double
%x - 十六进制输出int 或者long int 或者short int 
%o  - 八进制输出
%s  - 字符串 

System.in();
*/ 
main(){
	int i;
	printf("请输入的数字:\n");
	scanf("%d",&i);
	printf("您输入的数字是:%d\n",i);
	
	//输入 在C语言中没有String类型,但是可以用char数组来表示 
	char cArray[]={'H','E','L','L','O'}; 
	int j;
	for(j=0;j<5;j++){
		printf("cArray[%d]==%c\n",j,cArray[j]);
	} 
	
	printf("cArray== %s\n",cArray);
	system("pause"); 
} 

输出到控制台内容如下:

在这里插入图片描述
2.输入函数2.c文件

#include<stdio.h>
#include<stdlib.h>
/**
输入函数
scanf("占位符",内存地址)

%d  - int
%ld  - long int
%c  - char
%f  - float
%u  - 无符号数 
%hd  - 短整数
%lf  - double
%x - 十六进制输出int 或者long int 或者short int 
%o  - 八进制输出
%s  - 字符串 

System.in();
*/ 
main(){

	char cArray[5]; 
	printf("请输入HELLO: \n");
	scanf("%s",&cArray);
	int j;
	for(j=0;j<5;j++){
		printf("cArray[%d]==%c\n",j,cArray[j]);
	} 
	
	printf("cArray== %s\n",cArray);
	system("pause"); 
} 

输出到控制台内容如下:

在这里插入图片描述
3.输入函数3.c文件

#include<stdio.h>
#include<stdlib.h>
/**
输入函数
scanf("占位符",内存地址)

%d  - int
%ld  - long int
%c  - char
%f  - float
%u  - 无符号数 
%hd  - 短整数
%lf  - double
%x - 十六进制输出int 或者long int 或者short int 
%o  - 八进制输出
%s  - 字符串 

System.in();
*/ 
main(){

	char cArray[]={'a','b','c','d','e','\0','a','b'}; //\0代表结束
	//数组是一块连续的内存空间 
	printf("cArray==%s\n",cArray);
	
	//char类型的指针 
	char* text="I love you!!";
	printf("text==%s\n",text); 
	
	system("pause"); 
} 

输出到控制台内容如下:

在这里插入图片描述
四、C语言指针的初步认识

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

/**
	指针就是内存地址
	内存地址就是指针 
*/
main(){
	//定义一个int类型的变量i,并且赋值为10 
	int i=10;
	//定义一个int类型的一级指针变量p 
	int* p;
	//把i对应的地址赋值给p变量
	p = &i;
	//指针取值*p:把p变量对应的地址的值取出来
	printf("*p==%d\n",*p); 
	system("pause");
} 

输出到控制台内容如下:
在这里插入图片描述
五、C语言指针的深入理解

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

/**
	指针就是内存地址
	内存地址就是指针 
*/
main(){
	int i = 100;
	int* p = &i;
	//第一个实验:如果修改i值,P值有变化吗? 
//	printf("修改i值前,p的值是:%#x\n",p); //修改i值前,p的值是:0x62fe14
//	i=200;
//	printf("修改i值后,p的值是:%#x\n",p);//修改i值后,p的值是:0x62fe14


	//第二个实验:如果修改p值,i值有变化吗?
//	printf("修改i值前,i的值是:%d\n",i);  //修改i值前,i的值是:100
//	int j = 200; 
//	p=&j;
//	printf("修改i值后,i的值是:%d\n",i); //修改i值后,i的值是:100 



//第三个实验:如果修改i值,*P值有变化吗? 
//	printf("修改i值前,*p的值是:%d\n",*p); //修改i值前,*p的值是:100
//	i=200;
//	printf("修改i值后,*p的值是:%d\n",*p); //修改i值后,*p的值是:200

	//第四个实验:如果修改p值,i值有变化吗?
	printf("修改*p值前,i的值是:%d\n",i); //修改*p值前,i的值是:100
	*p=200;
	printf("修改*p值后,i的值是:%d\n",i);//修改*p值后,i的值是:200
	system("pause"); 
}

六、C语言中互换两个数字

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

/**
	互换两个数 
*/ 
void switch1(int a,int b){ //传值无法改变值 
	int temp = a;
	a = b;
	b = temp;
	printf("sitch中 a地址==%#x\n",&a); 
	printf("sitch中 b地址==%#x\n",&b);
}

void switch2(int* a,int* b){ //传地址,可以改变值 
	int temp = *a;
	*a = *b;
	*b = temp;
	printf("sitch2中 a地址==%#x\n",a); 
	printf("sitch2中 b地址==%#x\n",b);
}

main(){
	int a = 100;
	int b = 200;
	printf("main中 a地址==%#x\n",&a); 
	printf("main中 b地址==%#x\n",&b);
	
	printf("a==%d\n",a);
	printf("b==%d\n",b);

	switch1(a,b);
//	switch2(&a,&b);
	printf("a==%d\n",a);
	printf("b==%d\n",b);
	system("pause");
}

执行switch1()函数控制台输出的结果

在这里插入图片描述
执行switch2()函数控制台输出的结果

在这里插入图片描述
七、C语言中函数返回多个值

/**
	返回多个值 
*/ 

void close(int* a,int* b){
	*a=0;
	*b=0;
}
main(){
	//一键关闭GPS和wifi
	//1代表的是开,0代表的是关闭 
	int a = 1;
	int b = 1;
	close(&a,&b);
	printf("a==%d\n",a);
	printf("b==%d\n",b); 
	system("pause");
}

运行结果如下:
在这里插入图片描述
注意:
通过被调函数修改主调函数普通变量的值
1、实参必须是普通变量的地址
2、形参必须是指针变量
3、被调函数中通过修改 *形参名的方式修改主调函数相关变量的值。

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

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

相关文章

秒级体验本地调试远程 k8s 中的服务

点击上方蓝色字体&#xff0c;选择“设为星标” 回复”云原生“获取基础架构实践 背景 在这个以k8s为云os的时代&#xff0c;程序员在日常的开发过程中&#xff0c;肯定会遇到各种问题&#xff0c;比如&#xff1a;本地开发完&#xff0c;需要部署到远程k8s集群&#xff0c;本地…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块5

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

区间预测 | MATLAB实现VAR向量自回归时间序列区间预测

区间预测 | MATLAB实现VAR向量自回归时间序列区间预测 目录 区间预测 | MATLAB实现VAR向量自回归时间序列区间预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 区间预测 | MATLAB实现VAR向量自回归时间序列区间预测 VAR(Vector Autoregression)模型是一种广泛应用于时…

pytest 自定义HOOK函数

除了系统提过的HOOK函数外&#xff0c;也可以通过自定义HOOK的方式实现想要的功能。 首先创建一个py文件&#xff0c;里面定义自己的HOOK函数&#xff0c;主要pytest里面的hook函数必须以pytest开头。 #myhook.pydef pytest_myhook(user):"""自定义HOOK函数&q…

SpringBoot项目部署(前后端分离、Linux部署项目)

一、架构 部署环境说明&#xff1a; 192.168.122.100(服务器A)&#xff1a; Nginx&#xff1a;部署前端项目、配置反向代理 Mysql&#xff1a;主从复制结构中的主库 192.168.122.131 (服务器B)&#xff1a; jdk: 运行Java项目 git:版本控制工具 (从gitee中拉取源码) maven:…

No104.精选前端面试题,享受每天的挑战和学习(小米)

文章目录 聊一下vue和react的区别react生命周期有哪些hooks解决了什么问题小程序跳转传参怎么传附录&#xff1a;「简历必备」前后端实战项目&#xff08;推荐&#xff1a;⭐️⭐️⭐️⭐️⭐️&#xff09; &#x1f4c8;「作者简介」&#xff1a;前端开发工程师 | 蓝桥云课签…

CenOS设置启动级别

背景知识 init一共分为7个级别&#xff0c;这7个级别的所代表的含义如下 0&#xff1a;停机或者关机&#xff08;千万不能将initdefault设置为0&#xff09;1&#xff1a;单用户模式&#xff0c;只root用户进行维护2&#xff1a;多用户模式&#xff0c;不能使用NFS(Net File S…

Banana Pi BPI-CM4 评测(计算模块 4),更快性能,旨在替换树莓派CM4

如果您正在寻找可靠的单板计算机来提升您的下一个项目&#xff0c;但无法找到满足您需求的 Raspberry Pi&#xff0c;请看看我是否可以提供帮助。在这篇详细的评论中&#xff0c;我将向您介绍 Banana Pi CM4&#xff0c;这是一款适用于各种任务的多功能且强大的解决方案。从经验…

Blazor前后端框架Known-V1.2.8

V1.2.8 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazor…

太强了~ 这份《23 种设计模式加强版》宝典,阿里 P8 都得细细研究

说在前面的话 Java 作为老牌纯正的编程语言&#xff0c;在规范性上有着天然优势。因此本版的设计模式讲解全部用 Java 语言来描述&#xff0c;并针对 Java 语言的特性对讲解内容做了相当大的改动。 不知道大家是否听过编程界的一段话&#xff1a;掌握设计模式相当于华山派的&…

信号和槽函数的扩展

信号和槽函数的扩展 一个信号连接多个槽函数一个槽函数连接多个信号信号连接信号 一个信号可以连接多个槽函数, 发送一个信号有多个处理动作 需要写多个connect&#xff08;&#xff09;连接槽函数的执行顺序和信号的发射顺序相同&#xff08;QT5中&#xff09;信号的接收者可…

C#实现读写CSV文件的方法详解

目录 CSV文件标准 文件示例RFC 4180简化标准读写CSV文件 使用CsvHelper使用自定义方法总结 项目中经常遇到CSV文件的读写需求&#xff0c;其中的难点主要是CSV文件的解析。本文会介绍CsvHelper、TextFieldParser、正则表达式三种解析CSV文件的方法&#xff0c;顺带也会介绍一…

SpringBoot中MongoDB的使用

SpringBoot中MongoDB的使用 MongoDB 是最早热门非关系数据库的之一&#xff0c;使用也比较普遍&#xff0c;一般会用做离线数据分析来使用&#xff0c;放到内网的居 多。由于很多公司使用了云服务&#xff0c;服务器默认都开放了外网地址&#xff0c;导致前一阵子大批 MongoD…

骨传导耳机是什么?为什么不用塞到耳朵里?

骨传导耳机其实就跟它的名字一样&#xff0c;用骨传导声音的耳机&#xff0c;整个声音传导过程都是开放双耳的&#xff0c;不接触耳膜&#xff0c;佩戴非常舒适的耳机。 为什么不需要塞进耳朵里&#xff0c;首先咱们要先知道骨传导的原理&#xff1a; 如上图所示&#xff0c;骨…

【Linux命令200例】less强大的文件内容查看工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

项目实战 — 消息队列(1) {需求分析}

一、什么是消息队列 消息队列&#xff08;Message Queue ,MQ&#xff09;&#xff0c;就是将阻塞队列的数据结构&#xff0c;提取成了一个程序&#xff0c;独立进行部署。也就是实现一个生产者消费模型。 有关生产者消费者模型&#xff0c;参考多线程 — 阻塞队列_多线程阻塞…

redis基本架构:一个键值数据库包含什么?(这篇文章主要是一个引导的作用)

我们设计一个简单的smpliekv数据库&#xff0c;来体验简直数据库包含什么 体来说&#xff0c;一个键值数据库包括了访问框架、索引模块、操作模块和存储模块四部分&#xff08;见 下图&#xff09;。接下来&#xff0c;我们就从这四个部分入手&#xff0c;继续构建我们的 Simpl…

【MyBatis】MyBatis 3.5+版本报错合集(持续更新)

报错&#xff1a;BindingException 1. org.apache.ibatis.binding.BindingException: Type interface xxx is not known to the MapperRegistry. 2. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx 解决方案 在pom.xml中添加如下代码…

NetApp FAS控制器的启动过程详解

了解NetApp FAS存储系统的控制器启动过程对于控制器故障的诊断分析非常重要&#xff0c;最近在给几个小朋友培训NetApp&#xff0c;顺便把这个启动过程总结了一下&#xff0c;分享给大家&#xff0c;遇到控制器故障&#xff0c;就可以照方抓药了&#xff0c;如果还是搞不懂&…

自学网络安全(黑客)的注意事项

自学网络安全是一项重要而复杂的任务&#xff0c;以下是一些注意事项&#xff1a; 确定学习目标&#xff1a;网络安全是一个广泛的领域&#xff0c;包括密码学、网络防御、漏洞利用等多个方面。在自学之前&#xff0c;确定你感兴趣的领域&#xff0c;并设定明确的学习目标。 寻…