嵌入式C语言基础(一)

嵌入式C语言基础:

system函数:功能是运行windows命令

#include <stdio.h>
#include <stdlib.h>
int main()
{//main是程序的入口,操作系统运行程序先找mainsystem("ipconfig");//在windows下ipconfig查看本地的网络状态system("pause");//pause是程序运行后不直接退出return 0;//一般函数调用返回给操作系统,如果正常返回都是0,若出错返回负数。
}
//system("color 3");可设置输出信息的颜色数字可变。

以上代码运行结果如图:
在这里插入图片描述
同样也可以用system启动QQ:

  1. 首先要找到QQ的安装路径,我这里是C:\Program Files (x86)\Tencent\QQ\Bin
  2. 可以win+R调用命令窗口运行一下start C:“Program Files (x86)”\Tencent\QQ\Bin\QQ.exe 注意:因为Program Files (x86)之间有空格所以要用双引号引起来当做字符串。然后我们就可以将命令写入到程序中去。

代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{system("start C:\\\"Program Files (x86)\"\\Tencent\\QQ\\Bin\\QQ.exe");system("pause");//若将这段代码注释掉,则运行完QQ后不会停留在按任意键继续那个界面。return 0;
}
//若直接将命令拷贝到system函数中
//会因字符串中有字符串而报错,所以要将字符串转义,反斜杠也要转义。

转义字符有下表:
在这里插入图片描述
变量:
数据是存放在内存中的,都是以010…这些二进制的数字在内存中存放的。定义变量格式:数据类型 变量名 ,若将变量输出要有占位符如%d,%f,%lf等
数据类型都有:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
函数:

#include <stdio.h>
#include <stdlib.h>
/*
1、这里的a是形式参数
2、形式参数也是一个变量,局部变量,有自己的内存空间
3、当函数被调用的时候才申请了该内存空间,才有了这个变量同时这个空间内的数据被赋值成实际参数的值,函数调用把实际参数的值拷贝一份给形式参数。
4、函数执行结束后,该空间由内存管理单元自动回收(释放)
5、形参中的地址(虚拟地址)和实际参数的地址不一样
*/
void test(int a)//a 它是局部变量,同时它是一个形式参数,作用域仅限该函数
{printf("hello %d\n",a)printf("函数中a的地址:%p\n",&a);
}
int main()
{int a=1test(a);printf("main 中a的地址是:%p\n",&a);system("pause");return 0;
}

getchar()函数用来吸收字符(回车也是字符)

数组:

#include <stdio.h>
#include <stdlib.h>
int main()
{//数组地址是连续的 //数组通过下标来引用数组中的元素,从0开始//数组的中括号[],只有在定义一个数组的时候,才表示数组的大小,其余任何情况都表示用下标来访问数组。int arry1[100];//初始化数组,仅仅申请了100个整型数的内存空间int arry2[3]={1,2,3};//有初始化的数组,完整初始化,该数组申请了三个整形数的内存空间,并赋值三个数1,2,3int arry3[100]={1,2,3};//有初始化的数组,不完整初始化,该数组申请了100个整形数内存空间,并赋值三个数1,2,3放在数组的前三位。int n;scanf("%d",n);int arry4[n];//实际应用中无报错可使用,但是一些教材中认定为非法。system("pause");return 0;
}

数组和函数:

#include <stdio.h>
#include <stdlib.h>
void arrayPrint(int data[3])
{int i;for(i=0;i<3;i++){printf("%d ",data[i]);}putchar('\n');//输出完毕后换行,putchar()是输出一个字符,getchar()是用来获取一个字符
}
int main()
{int array[3]={1,2,3};//数组和函数结合,数组名当做实际参数arrayPrint(array);//问:如何计算数组中元素的个数, 数组的总大小/一个类型的大小int a[3]; //一个整型占用空间4个字节,3个占用空间12个字节char b[3]; //一个char型占用空间1个字节,三个占用空间3个字节//相同点:数组中元素的个数相同//不同点:叔祖类型不同,数组的内存大小不同printf("a数组的大小是:%d\n",sizeof(a));//sizeof是关键字并不是函数printf("b数组的大小是:%d\n",sizeof(b));printf("一个整数的空间是:%d\n",sizeof(int));printf("一个字符型的空间是:%d\n",sizeof(char));printf("a数组有%d个元素\n",sizeof(a)/sizeof(a[0]));//或者写为sizeof(a)/sizeof(int)printf("b数组有%d个元素\n",sizeof(b)/sizeof(b[0]));		//可以将sizeof()封装成函数,sizeof(a)/sizeof(a[0]),不管数组是什么类型,都可以这样计算 system("pause");return 0;
}

注意:形式参数中,虽然写的是一个数组的样子,中括号中数组的大小是无效的!!!!!

#include <stdio.h>
#include <stdlib.h>
void arrayPrint(int datas[],int cnt)
//数组做函数的参数会退化为指针
//形式参数中,虽然写的是一个数组的样子,中括号中数组的大小是无效的!!!!!
//这里不管中括号写多少,都不能代表形参数组有多大,仅仅告诉编译器这个datas和普通的整型不一样是一个数组,所以数字可写可不写
//这里的中括号的作用仅仅用来表示该参数是一个地址!在windows啊哈c中,用4个字节表示地址,linux64位中用8个字节表示。
{printf("数组的大小是:%d\n",sizeof(datas));printf("一个int数据大小是:%d\n",sizeof(int));printf("函数调用中:array数组元素个数为%d\n",sizeof(datas)/sizeof(datas[0]));int i;for(i=0;i<cnt;i++){printf("%d ",datas[i]);}putchar('\n');//输出完毕后换行,putchar()是输出一个字符,getchar()是用来获取一个字符
}int main()
{int array[4]={1,2,3};printf("数组的大小是:%d\n",sizeof(array));printf("main中:array数组元素个数为%d\n",sizeof(array)/sizeof(array[0]));//arrayPrint(array,sizeof(array)/sizeof(array[0]));//要想输出数组可以设置两个参数arrayPrint(&array[0],sizeof(array)/sizeof(array[0]));//数组名表示数组第一个元素的地址,所以也可以用的一个元素的地址作为参数system("pause");return 0;
}

C语言定义宏计算数组个数:

#include <stdio.h>
#define NTBL (sizeof(table)/sizeof(table[0]))
int main()
{int table[]={1,2,3,4,5,6,7};printf("%d \n",NTBL);system("pause");return 0;
}
/*第二种方式*/
#include <stdio.h>
#define NTBL(arr,len){len=sizeof(arr)/sizeof(arr[0]);}
int main()
{int longth,array[]={1,2,3,4,5,6,7};//printf("%d \n",NTBL);NTBL(array,longth);printf("%d \n",longth);system("pause");return 0;
}

练习:

#include <stdio.h>
#include <stdlib.h>
void initScores(int datas[],int size)
{int i;for(i=0;i<size;i++){printf("请输入第%d个学生的分数\n",i+1);scanf("%d",&datas[i]);if(datas[i]<0 || datas[i]>100){printf("输入错误,强制退出\n");system("pause");exit(-1);}}
}
void arrayPrint(int datas[],int size)
{int i;for(i=0;i<size;i++){printf("第%d个学生的成绩是%d\n",i+1,datas[i]);}
}
int findMax(int datas[],int size)
{int i;int max=0;for(i=0;i<size;i++){if(datas[i]>max){max=datas[i];        }}return max;
}
int findMin(int datas[],int size)
{int i;int min=datas[0];for(i=0;i<size;i++){if(datas[i]<=min){min=datas[i];        }}return min;
}
float findAverge(int datas[],int size)
{int i;int sum=0;float ave;for(i=0;i<size;i++){sum=datas[i]+sum;}ave=(float)sum/size;return ave;
}
void printRet(int data1,int data2,float data3)
{printf("最高分是:%d,最低分是:%d,平均分是:%f\n",data1,data2,data3);
}
int main()
{int scores[3];int len;int max;int min;float averge;len=sizeof(scores)/sizeof(scores[0]);//1、初始化数组initScores(scores,len);//1.1打印数组arrayPrint(scores,len);//2、找到最高分max=findMax(scores,len);//3、找到最低分min=findMin(scores,len);//4、算出平均分averge=findAverge(scores,len);//5、输出结果printRet(max,min,averge);system("pause");return 0;
}

指针的概述:

#include <stdio.h>
#include <stdlib.h>
//通过变量名直接访问变量
//变量访问有两种方式:①变量名②地址(指针)
//指针=地址
int main()
{int a=10;printf("通过变量名输出:a=%d\n",a);printf("a的地址是:%p\n",&a);printf("通过地址输出:a=%d\n",*(&a));//*是将地址中的内容取出来,&a是地址system("pause");return 0;
}

指针变量:

#include <stdio.h>
#include <stdlib.h>
//*只有在定义一个指针变量的时候才是标识符
//其他情况是运算符,该运算符的作用是取出内存地址中数据的值
int main()
{int a=10;int b=20;int* p1;//指针变量,存放的是地址p1=&a;//给指针变量赋值int* p2=&b;//定义并初始化一个指针变量printf("通过变量名a=%d\n",a);printf("通过指针变量a=%d\n",*p1);printf("通过指针变量b=%d\n",*p2);system("pause");return 0;
}

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

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

相关文章

docker info 显示 Docker 系统信息

docker info : 显示 Docker 系统信息&#xff0c;包括镜像和容器数

Syncd - 开源自动化部署工具

官网地址&#xff1a;https://gitee.com/dreamans/syncd/issues syncd是一款开源的代码部署工具&#xff0c;它具有简单、高效、易用等特点&#xff0c;可以提高团队的工作效率. 目前只支持类Linux系统. 特性 Go语言开发&#xff0c;编译简单、运行高效 Web界面访问&#xff0…

Linus中帮助命令man

使用方法&#xff1a;man 可以查看想要使用命令的详细使用方法 man 命令

大牛是怎么思考设计SQL优化方案的?

作者&#xff1a;惨绿少年https://www.cnblogs.com/clsn/p/8214048.html在进行MySQL的优化之前&#xff0c;必须要了解的就是MySQL的查询过程&#xff0c;很多查询优化工作实际上就是遵循一些原则&#xff0c;让MySQL的优化器能够按照预想的合理方式运行而已。图-MySQL查询过程…

用 Git 和 Github 提高效率的 10 个技巧!

Git 和 GitHub 都是非常强大的工具。即使你已经使用他们很长时间&#xff0c;你也很有可能不知道每个细节。我整理了 Git 和 GitHub 可能提高日常效率的10个常用技巧。GitHub1、快捷键: t 和 w在你的源码浏览页面&#xff0c;按 t 可以快速进入模糊文件名搜索模式&#xff1a;在…

docker显示镜像的摘要信息

显示镜像的摘要信息 docker images --digests

docker搜索镜像

docker search 要下载的 OFFICIAL 为ok的表示是官方镜像

C#操作HttpClient工具类库

using System; using System.Collections.Generic; using System.Net.Http; using System.Windows.Forms; using System.Configuration; using System.IO; using Newtonsoft.Json; namespace Dcflow { public class HttpHelper { //获取Configuration对象 public static string…

docker从仓库找镜像

docker search -s 数量 要下载的 数量表示仓库start数

bzoj 1911: [Apio2010]特别行动队 2011-12-26

1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 892 Solved: 359[Submit][Status][Discuss] DescriptionInputOutputSample Input4 -1 10 -20 2 2 3 4 Sample Output9HINT Source _________________________________________ 很简单的动规方程&a…

docker pull 从仓库拉取镜像

docker pull 要拉取的镜像名 等价于 docker pull 要拉取的镜像名:lastest 拉取固定的镜像&#xff1a;docker pull 要拉取的镜像名:版本号 省略lastest表设计就是拉取的最新的

C#抓取网页HTML内容

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; using System.Text; using System.IO; using System.Text.RegularExpressions; namespace Web { /// <summary> /// 公共方法类 /// </summary> p…

docker删除本地所有镜像

docker rmi -f ${docker images -qa}

WiFi避障小车

硬件清单&#xff1a; Wemos D1&#xff08;支持AP模式也就是路由模式和STA模式也就是上网设备&#xff09;、超声波模块、小车、L9110s步进电机控制器 软件&#xff1a; eclipse、arduino IDE WiFi配置参考博文 ESP8266WiFi库: 从上图中可以看出ESP8266WiFi库主要包含Stati…

yum常用命令整理

yum命令的形式一般如下。要说明的是以下演示中所使用到的PACKAGE、GROUP都是变量&#xff0c;需要保证运行yum命令的主机能连接外网&#xff0c;否则大部分命令将由于没有网络连接而不能输出结果。yum [options] [command] [package]#以下演示中大写的单词是变量1.安装操作yum …

CSS3 2D 转换

CSS3 2D 转换 先看兼容性 transform属性向应用元素应用2d 或者 3d装换&#xff1b;该属性允许我们进行旋转&#xff0c;缩放&#xff0c;移动或者倾斜&#xff1b; 基本语法&#xff1a; transform: none|transform-functions;transform-function&#xff1a;这东东有n的函数可…

程序猿最喜欢说的30句话

虽然代码总会有这个那个问题&#xff0c;但程序猿却总有谜一般的从容和自信。上图来自&#xff1a;《当程序出问题时程序员最喜欢说的30句话》来看看程序猿经常说的话&#xff1a;1、在我的电脑上是正常的啊。。。2、不可能出现这种情况的3、快了&#xff0c;已经完成了90%。4、…

linux环境下Ncurses实现贪吃蛇游戏

游戏说明&#xff1a; linux环境下基于Ncurses图形库的C语言小游戏。 Ncurses介绍&#xff1a; Ncurses(new curses)是一套编程库&#xff0c;它提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。 Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本…