嵌入式C语言基础(一)

本文详细介绍了C语言中system函数的使用,演示了如何执行Windows命令,如查看网络状态和启动QQ。此外,还讲解了指针的概念、变量定义、数组操作以及函数参数传递,重点展示了如何通过数组和指针进行数据处理和函数调用。
摘要由CSDN通过智能技术生成

嵌入式C语言基础:

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

#include <stdio.h>
#include <stdlib.h>
int main()
{
	//main是程序的入口,操作系统运行程序先找main
	system("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,3
    int 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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值