娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月14日(星期六)

正在發生

2021年09月14日 | jz2440裸機開發與分析:串口編程3之printf解析

發布者:EtherealMelody 來源: eefocus關鍵字:jz2440  printf 手機看文章 掃描二維碼
隨時隨地手機看文章

測試代碼

 #include 

 

void printf_test(void)

{

printf("hello wordn");

printf("This is www.100ask.org   my_printf testn") ;

printf("test char           =%c,%cn", 'A','a') ;

printf("test decimal number =%dn",    123456) ;

printf("test decimal number =%dn",    -123456) ;

printf("test hex     number =0x%xn",  0x55aa55aa) ;

printf("test string         =%sn",    "www.100ask.org") ;

}


int main(int argc ,char *argv[])

{

printf_test();

return 0;

}


效果:


hello word

This is www.100ask.org   my_printf test

test char           =A,a

test decimal number =123456

test decimal number =-123456

test hex     number =0x55aa55aa

test string         =www.100ask.org


下面對printf進行分析

printf函數原型

int printf(const char *format, …);

format :固定參數

… :可變參數


代碼如下:

方法一:


#include


struct  person{

char *name;

int  age;

char score;

int  id;

};

/* 

 *int printf(const char *format, ...); 

 *依據:x86平臺,函數調用時參數傳遞是使用堆棧來實現的 

 *目的:將所有傳入的參數全部打印出來 

 */ 

int push_test(const char *format, ...)

{

char *p = (char *)&format;

int i;

struct  person per;  

char c;

double d;

printf("arg1 : %sn",format);  


    //==============

p = p + sizeof(char *);

/*指針對連續空間操作時: 1) 取值  2)移動指針*/  

i = *((int *)p);

p = p + sizeof(int);

printf("arg2 : %dn",i);   


    //==============             

/*指針對連續空間操作時: 1) 取值  2)移動指針*/    

  per = *((struct  person *)p); 

p = p + sizeof(struct person);

printf("arg3: .name = %s, .age = %d, .socre=%c  .id=%dn",

          per.name,   per.age,   per.score, per.id);   


    //==============    

/*指針對連續空間操作時: 1) 取值  2)移動指針*/

c = *((char *)p);

p = p + ((sizeof(char) + 3) & ~3);

printf("arg4: %cn",c);


    //==============    

/*指針對連續空間操作時: 1) 取值  2)移動指針*/

d = *((double *)p);

p = p + sizeof(double);

printf("arg5: %fn",d);

return 0;

}


int main(int argc,char **argv)

{

struct  person per={"www.100ask.org",10,'A',123};

printf("sizeof(char   )=%dn",sizeof(char   ));

printf("sizeof(int    )=%dn",sizeof(int    ));

printf("sizeof(char  *)=%dn",sizeof(char  *));

printf("sizeof(char **)=%dn",sizeof(char **));

printf("sizeof(struct  person)=%dn",sizeof(struct  person));

    //push_test("abcd");

    //push_test("abcd",123);  

    //push_test("abcd",123,per); 

    //push_test("abcd",123,per,'c');   

    push_test("abcd",123,per,'c',2.79);

return 0;

}


方法二:


#include


struct  person{

char *name;

int  age;

char score;

int  id;

};

/* 

 *int printf(const char *format, ...); 

 *依據:x86平臺,函數調用時參數傳遞是使用堆棧來實現的 

 *目的:將所有傳入的參數全部打印出來 

 */ 

int push_test(const char *format, ...)

{

char *p = (char *)&format;

int i;

struct  person per;  

char c;

double d;

printf("arg1 : %sn",format);  


    //==============

/*指針對連續空間操作時: 1) 取值  2)移動指針*/  

p = p + sizeof(char *);

i = *((int *)p);

printf("arg2 : %dn",i);   


    //==============             

/*指針對連續空間操作時: 1) 取值  2)移動指針*/    

p = p + sizeof(int);  

per = *((struct  person *)p);  

printf("arg3: .name = %s, .age = %d, .socre=%c  .id=%dn",

          per.name,   per.age,   per.score, per.id);   


    //==============    

/*指針對連續空間操作時: 1) 取值  2)移動指針*/

p = p + sizeof(struct person);

c = *((char *)p);

printf("arg4: %cn",c);


    //==============    

/*指針對連續空間操作時: 1) 取值  2)移動指針*/

p = p + ((sizeof(char) + 3) & ~3);

d = *((double *)p);

printf("arg5: %fn",d);

return 0;

}


int main(int argc,char **argv)

{

struct  person per={"www.100ask.org",10,'A',123};

printf("sizeof(char   )=%dn",sizeof(char   ));

printf("sizeof(int    )=%dn",sizeof(int    ));

printf("sizeof(char  *)=%dn",sizeof(char  *));

printf("sizeof(char **)=%dn",sizeof(char **));

printf("sizeof(struct  person)=%dn",sizeof(struct  person));

    //push_test("abcd");

    //push_test("abcd",123);  

    //push_test("abcd",123,per); 

    //push_test("abcd",123,per,'c');   

    push_test("abcd",123,per,'c',2.79);

return 0;

}


方法三:調用庫文件(stdarg.h)

代碼如下:


#include

#include


struct  person{

char *name;

int  age;

char score;

int  id;

};

/* 

 *int printf(const char *format, ...); 

 *依據:x86平臺,函數調用時參數傳遞是使用堆棧來實現的 

 *目的:將所有傳入的參數全部打印出來 

 */ 

int push_test(const char *format, ...)

{

//char *p = (char *)&format;

int i;

struct  person per;  

char c;

double d;

va_list p;

printf("arg1 : %sn",format);  


    //==============

//p = p + sizeof(char *);

va_start(p, format );   

/*指針對連續空間操作時: 1) 取值  2)移動指針*/  

//i = *((int *)p);

//p = p + sizeof(int);

i = va_arg(p,int);

printf("arg2 : %dn",i);   


    //==============             

/*指針對連續空間操作時: 1) 取值  2)移動指針*/    

  //per = *((struct  person *)p); 

//p = p + sizeof(struct person);

per = va_arg(p,struct person);

printf("arg3: .name = %s, .age = %d, .socre=%c  .id=%dn",

          per.name,   per.age,   per.score, per.id);   


    //==============    

/*指針對連續空間操作時: 1) 取值  2)移動指針*/

//c = *((char *)p);

//p = p + ((sizeof(char) + 3) & ~3);

c = va_arg(p,int);

printf("arg4: %cn",c);


    //==============    

/*指針對連續空間操作時: 1) 取值  2)移動指針*/

//d = *((double *)p);

//p = p + sizeof(double);

d = va_arg(p,double);

/*避免"野指針"*/

//p = (char *)0;

va_end( p ); 

printf("arg5: %fn",d);

return 0;

}


int main(int argc,char **argv)

{

struct  person per={"www.100ask.org",10,'A',123};

printf("sizeof(char   )=%dn",sizeof(char   ));

printf("sizeof(int    )=%dn",sizeof(int    ));

printf("sizeof(char  *)=%dn",sizeof(char  *));

printf("sizeof(char **)=%dn",sizeof(char **));

printf("sizeof(struct  person)=%dn",sizeof(struct  person));

    //push_test("abcd");

    //push_test("abcd",123);  

    //push_test("abcd",123,per); 

    //push_test("abcd",123,per,'c');   

    push_test("abcd",123,per,'c',2.79);

return 0;

}


stdarg.h中


typedef char *  va_list;

#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )


#define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )

//#define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

//#define va_arg(ap,t)    (ap = ap + _INTSIZEOF(t), *(t *)(ap - _INTSIZEOF(t)))

#define va_arg(ap,t)    (*(t *)(ap = ap + _INTSIZEOF(t), ap - _INTSIZEOF(t)))

#define va_end(ap)      ( ap = (va_list)0 )

關鍵字:jz2440  printf 引用地址:jz2440裸機開發與分析:串口編程3之printf解析

上一篇:jz2440裸機開發與分析:串口編程2
下一篇:jz2440裸機開發與分析:串口編程4之struct內存占用介紹

推薦閱讀

指導單位:中國汽車工業協會中國新能源汽車產業協會中國電動車行業協會充電設施在線網中國充電設施協會東風汽車集團 主辦單位:湖北省機械行業聯合會湖北省模具工業協會中國汽配行業協會湖北省激光行業協會武漢市汽車行業流通協會武漢市汽車行業協會武漢經開區(漢南區)汽車及汽車零部件行業商會 組織單位:北京亞太瑞斯會展服務有限公司振江國際展覽(北...
工信部在其官網公布了第四批綠色制造名單,其中,綠色工廠602家、綠色設計產品371種、綠色園區39家、綠色供應鏈管理示范企業50家。在綠色工廠表單中,北京京東方、富士康、三星電子、通富微電、友達光電、福州京東方、寧德新能源、成都京東方、廈門華聯電子、欣旺達電子、順絡電子等公司在列。在綠色供應鏈管理示范企業表單中,施耐德電氣(中國)有限公司...
今年小米共推出了四款小米10系列機型,包括小米10、小米10 Pro、小米10青春版和小米10至尊紀念版,尤其致敬小米10周年的小米10至尊紀念版受到了用戶和媒體的高度關注。而在不久前,小米10系列又有兩款新成員得到曝光,它們被稱為小米10T和小米10T Pro。現在有最新消息,近日有知名數碼博主進一步曝光了這兩款手機的外觀和部分配置信息。 根據知名數碼博...
據外媒報道,福特和林肯最近在申請有關車輛全系投影的專利,大概的思路就是將全息投影的影響小范圍的投射在水幕上,并顯示在發動艙機蓋上方。該系統由三部分組成,分別是車輛上的投影裝置、水霧產生裝置,以及根據鑰匙接近程度使兩者協同工作的控制器。車輛可以從雨水中收集水,并在水箱滿時關閉閥門,或使用空調冷凝水回收系統。當然也不一定是要在發動艙...

史海拾趣

問答坊 | AI 解惑

SVPWM的合成

  文章來源:凌陽單片機推廣中心 1.1 前言隨著計算機技術和電力電子技術的發展,變頻驅動技術憑借其優異的性能,在當今交流調速領域的應用越來越廣。變頻驅動主要使用的驅動波形主要有SPWM和SVPWM兩種。SPWM原理簡單、實現容易,是現在 ...…

查看全部問答∨

8 bit cpu jpg解碼時完全可行的,看那個單片機高手能搞定!

http://www.mzdesign.com.cn/articleshow.asp?id=309 JPG圖像解碼方案 引言       JPG(JPEG)是一種靜態圖象壓縮格式,其具有出色的壓縮能力和很小的圖象失真。因性能優異,JPG現已成為計算機的標準圖象格式。且隨著枝術的 ...…

查看全部問答∨

參數化串口發送程序

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; --LIBRARY ALTERA; --USE ALTERA.MAXPLUS2.ALL; LIBRARY LPM; USE LPM.LPM_COMPONENTS.ALL; -- *************************** ...…

查看全部問答∨

機柜操作臺圖片展示

核心提示:   監控操作臺、機柜的技術規范 1、 監控操作臺為上下分體,左右二組整體拼裝結構。 2、 監控操作臺采用鋼木結合或全鋼材料制作,配縫不大于1.0毫米,立面板可按所安裝設備尺寸開孔,整體美觀、 監控操作臺、機柜的技術規范 1、&n ...…

查看全部問答∨

關于wince程序最小化的問題

各位好!請問如何能將一個wince的程序最小化呢?發現showwindow(SW_MINIMIZE)并不起作用。和windowmobile差別很大呀!謝謝大家…

查看全部問答∨

得花了,散100分!限額10人!欲要從速!

08年4月2日注冊的ID,一直沒怎么使用,2010年2月活動了一下,得了朵花特此慶祝!以資鼓勵!…

查看全部問答∨

AD轉換軟件寫入方式怎么有延遲,誰能幫我看看到底錯在哪里

沒有錯誤,AD轉換是500Hz,轉換出來才200Hz左右,錯在哪里啊,感覺是while(AD0INT==0); 浪費時間了,高手來幫幫忙 //----------------------------------------------------------------------------- void PORTb_Init (void) { //  &nbs ...…

查看全部問答∨

關于Driver Studio 3.2 的安裝詳解

關于Driver Studio 3.2 的安裝詳解 經過對VC、WINDDK、Driver Studio這三個軟件反復的安裝,終于可以使Driver Studio能在VC環境下正常編譯了。俗話說久病成醫,遇到的問題多了,自然就有了很多解決問題的方法,現在拿出來和大家一起分享一下。 1 ...…

查看全部問答∨

新手求教,關于學習驅動開發!

新手求教,關于學習驅動開發! 對于驅動開發本人是菜鳥一個,由于工作需要,要求必須掌握驅動程序開發,主要是針對windows內核的(不涉及到硬件的驅動)。由于本人對這方面的知識掌握得很少,所以在這里請教各位驅動前輩我應該從哪里入手,該掌握 ...…

查看全部問答∨

wince下如何關閉LCD背光燈

我的嵌入式開發板與LCD屏是通過VGA接口連接的,開發板安裝的是wince5.0系統,我在wince5.0里設定了系統閑置一分鐘就關閉lcd背光燈,但是沒效果。請問誰知道在wince下如何實現關閉LCD背光燈?其原理和途徑是什么?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 抚远县| 当阳市| 老河口市| 礼泉县| 策勒县| 海晏县| 岑溪市| 嵊州市| 泽库县| 宣城市| 镇安县| 丰城市| 临汾市| 庆阳市| 济阳县| 任丘市| 三门峡市| 扎兰屯市| 凤庆县| 梅河口市| 罗田县| 车险| 余干县| 长武县| 故城县| 许昌市| 萨嘎县| 宝坻区| 句容市| 荔波县| 新竹市| 高淳县| 安福县| 始兴县| 钦州市| 合川市| 广河县| 唐山市| 化德县| 鄂尔多斯市| 黄浦区|