嵌入式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.pswp.cn/news/272294.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272294.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272294.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker info 顯示 Docker 系統信息

docker info : 顯示 Docker 系統信息&#xff0c;包括鏡像和容器數

如何通過session控制單點登錄

web服務器為每一個瀏覽器實例對應一個session。這個session有自己的一個獨立id,這個id保存在瀏覽器的cookie中&#xff08;這個cookie貌似隨著這個瀏覽器實例的關閉而清除&#xff09;&#xff0c;訪問web服務器的時候&#xff0c;web服務會根據你cookie中的sessionId來決定重新…

Syncd - 開源自動化部署工具

官網地址&#xff1a;https://gitee.com/dreamans/syncd/issues syncd是一款開源的代碼部署工具&#xff0c;它具有簡單、高效、易用等特點&#xff0c;可以提高團隊的工作效率. 目前只支持類Linux系統. 特性 Go語言開發&#xff0c;編譯簡單、運行高效 Web界面訪問&#xff0…

嵌入式C語言基礎(二)

指針是分類型的&#xff1a; 指針根據類型不同&#xff0c;偏移值也不同。指針和數組&#xff0c;如何讓指針指向數組&#xff1f; ①用數組名 &#xff1a;int array[10],int* p,parray ②用第一個元素的地址&#xff1a;int array[10],int* p,p&array[0] 注意&#xff1a…

Linus中幫助命令man

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

大牛是怎么思考設計SQL優化方案的?

作者&#xff1a;慘綠少年https://www.cnblogs.com/clsn/p/8214048.html在進行MySQL的優化之前&#xff0c;必須要了解的就是MySQL的查詢過程&#xff0c;很多查詢優化工作實際上就是遵循一些原則&#xff0c;讓MySQL的優化器能夠按照預想的合理方式運行而已。圖-MySQL查詢過程…

嵌入式C語言基礎(三)

字符串的定義方式及輸出&#xff1a; #include <stdio.h> #include <stdlib.h> void strPrint(char* data,int size) {int i;for(i0;i<size;i){printf("函數打印數組&#xff1a;%c\n",*data);}putchar(\n); } int main() {int i0;int a[3]{1,2,3};c…

web.config配置數據庫連接

第一種&#xff1a;獲取連接字符串 首先要定義命名空間 system.configuration 1. string connstr string constr ConfigurationManager.AppSettings["connstring"]; web.config文件:加在<appsettings>和</appsettings> 之間 <appsettings> <a…

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

Git 和 GitHub 都是非常強大的工具。即使你已經使用他們很長時間&#xff0c;你也很有可能不知道每個細節。我整理了 Git 和 GitHub 可能提高日常效率的10個常用技巧。GitHub1、快捷鍵: t 和 w在你的源碼瀏覽頁面&#xff0c;按 t 可以快速進入模糊文件名搜索模式&#xff1a;在…

docker顯示鏡像的摘要信息

顯示鏡像的摘要信息 docker images --digests

嵌入式C語言基礎(四)

為什么要用結構體&#xff1f; 在實際問題中&#xff0c;一組數據往往具有不同的數據類型。例如&#xff0c;在學生登記表中&#xff0c;姓名應為字符型;學號可為整型或字符型&#xff1b;年齡應為整型&#xff1b;性別應為字符型&#xff1b;成績可為整型或實型。顯然不能用一…

命令行分析java線程CPU占用

1.使用top命令找出占用cpu最高的JAVA進程pid號 2. 找出占用cpu最高的線程&#xff1a; top -Hp pid -d 1 -n 1 3. 打印占CPU最高JAVA進程pid的堆棧信息 jstack pid > /tmp/stacktrace.log 4. 把占CPU最高線程號碼換算成16進制到stacktrace.log中尋找相應線程16進制值找到…

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…

嵌入式C語言基礎鏈表

什么是鏈表&#xff1f; 鏈表其實就是一種數據結構&#xff0c;所謂的數據結構就是數據存放的思想。 數組、鏈表優缺點&#xff1a; 增加一個元素或者刪除一個元素都很難&#xff0c;因為地址是連續的&#xff0c;刪除一個元素可能會挪動多個元素&#xff0c;不靈活。但是對于鏈…

docker pull 從倉庫拉取鏡像

docker pull 要拉取的鏡像名 等價于 docker pull 要拉取的鏡像名:lastest 拉取固定的鏡像&#xff1a;docker pull 要拉取的鏡像名:版本號 省略lastest表設計就是拉取的最新的

理解js中的原型鏈,prototype與__proto__的關系

說到prototype&#xff0c;就不得不先說下new的過程。 我們先看看這樣一段代碼&#xff1a; 1<script type"text/javascript">2 var Person function () { };3 var p new Person();4</script>很簡單的一段代碼&#xff0c;我們來看看這個new究竟做了什…