欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言函數(shù)字符串不定參數(shù) c# 不定參數(shù)的函數(shù)

C語言不定長參數(shù)的問題

說的有點混亂,提供幾個方法。1,你的WHILE另開一個線程.2做一個LIST保存每個LOG的信息,每個信息是NEW出來的。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、虛擬主機、營銷軟件、網(wǎng)站建設、撫寧網(wǎng)站維護、網(wǎng)站推廣。

說實話,我還是沒明白你補充的意思。

我寫個偽代碼吧,希望能有點啟發(fā)

list LOG_INFO* info_list;

while ()

{

...//some function

//new出來的東西在堆上,不會被釋放掉,所以一直都存在

LOG_INFO* log_info = new LOG_INFO();

//放到煉表里保存指針

info_list.push_back(log_info);

...//some function

}

output_log(info_list);//把煉表給輸出的函數(shù)

release_info(info_list);//釋放new的東西。

基本是這個意思,就是你new出來的東西不會被釋放.

另外log_info可以是一個類,里面變的東西都可以設置,當然有的東西沒有可以不設置.因為具體問題不清楚,所以可能更優(yōu)化.

而輸出的時候是根據(jù)類里面的成員變量進行輸出的.

舉例:

比如可能輸出的是字符串也可能輸出圖片那么可以定義如下

class Info

{

string str;

Image image;

bool is_str;

bool is_image;

}

然后判斷到底有什么,當然也可以用指針等其他方法進行數(shù)據(jù)結構的優(yōu)化.

C語言,不定參數(shù)的函數(shù)指針問題

很巧我現(xiàn)在正好也有實現(xiàn)這樣函數(shù)的需求,其實就是看了C語言可變參數(shù)函數(shù)的相關資料,你就差不多知道怎么實現(xiàn)了。

只不過其中有一個很重要的大坑,只要邁過去就沒問題。我是試了半天才明白的:

如果參數(shù)是char或float類型,這樣的參數(shù)放在可變參數(shù)部分的話,編譯器是會默認把它們的類型提升為相應的“全”類型的:char提升為int,float提升為double。如果你沒注意這一點就會出現(xiàn)錯誤。當然可以通過指針的類型轉換來避免。

先簡略地點一下,等我在CSDN博客里詳細地寫一寫心得吧。雖然是N年前的問題估計樓主早就自己解決了,但希望能幫到其他人:)

c語言中的printf()這樣的有不定個參數(shù)的函數(shù)是如何實現(xiàn)的

首先先看到main函數(shù)中的不定參數(shù):

1.引用:在Turbo C2.0啟動過程中, 傳遞main()函數(shù)三個參數(shù): argc, argv和env。

* argc: 整數(shù), 鴐ain()的命令行參數(shù)個數(shù)。

* argv: 字符串數(shù)組。

argv[0] 為程序運行的全路徑名

argv[1] 為在DOS命令行中執(zhí)行程序名后的第一個字符串;

argv[2] 為執(zhí)行程序名后的第二個字符串;

...

argv[argc]為NULL。

*env: 字符串數(shù)組。env[] 的每一個元素都包含ENVVAR=value形式的字符

串。其中ENVVAR為環(huán)境變量。value 為ENVVAR的對應值

#include stdlib.h

#include stdio.h

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

{

int i;

printf("%d\n", argc); /* 為什么它的輸出是 1, 它到底是定義什么的,我看不明上面的解釋*/

for(i=0; i=argc; i++)

printf("argv[%d]:%s\n", i, argv[i]);

for(i=0; env[i]!=NULL; i++)

printf(" env[%d]:%s\n", i, env[i]);

}

argc, argv, env是在main()函數(shù)之前被賦值的,編譯器生成的可執(zhí)行文件,main()不是真正的入口點,而是一個標準的函數(shù),這個函數(shù)名與具體的操作系統(tǒng)有關。

就想到其他函數(shù)是否能實現(xiàn)一樣的功能,查詢了相關資料,基本上都是利用STDARG.H中的

#define va_start(ap, parmN) (ap = ...)

#define va_arg(ap, type) (*((type *)(ap))++)

#define va_end(ap)

定義如下:

typedef char * va_list;

#define va_start _crt_va_start

#define va_arg _crt_va_arg

#define va_end _crt_va_end

#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )

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

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

修改他人程序如下:

void average(int first,...)

{int i=first;

va_list maker;

va_start(maker,first);

while(i!=-1){ printf("%p: %d\n",maker,i);

i=va_arg(maker,int);

}

}

void main(void)

{

average(2,3,4,4,-1);

}

運行結果:

FFCE: 2

FFD0: 3

FFD2: 4

FFD4: 4

這個程序顯示函數(shù)參數(shù)的地址相差2個字節(jié)

所以可以改寫為:

void x(char *n,...)

{int *p;

p=n;

while(*p!=-1)

{printf("%p:%s\n",p,*p,*p);

p+=sizeof(char);}}

void main()

{x("g","hfd","gfg","vsds",-1);}

運行結果:

FFD2:g

FFD4:hfd

FFD6:gfg

FFD8:vsds

不必通過宏va_start,va_arg,va_end實現(xiàn)

C語言 函數(shù)參數(shù)怎么寫才能使字符串不變

親,const char* arg已經(jīng)讓這個arg字符串的內(nèi)容無法改變了(arg指向的地址空間內(nèi)存的內(nèi)容不允許改變)。

比如你試圖arg[0]='H'; 編譯就會失敗。因為const char *的意義是字串內(nèi)容無法改變。但是,s如果是另一個字符串,則arg=s可以編譯通過。即,讓arg指向另一塊不同的地址(另一個不同的字符串)。

如果我沒有猜錯,你和char * const arg混了。char * const arg的意思是,字串的內(nèi)容可以改變(arg指向的地址上存的內(nèi)容可以改變),但是,arg指向的地址不能變。假設s是另一個string,arg=s就無法編譯通過。

const char* const arg的意思就是,arg指向的地址不能換,arg指向的地址里面的內(nèi)容不能改,就是上面兩個提到的不可寫特性的統(tǒng)合,即arg=s和arg[0]='H'都無法編譯通過

C語言怎么實現(xiàn)函數(shù)不定參數(shù)

C語言中定義了va_list, va_start( ), va_arg( ), va_end( ) 這樣一組宏來處理可變參數(shù)問題。

可以參考printf的聲明,創(chuàng)建自己的實現(xiàn)函數(shù)。示例:

#includestdio.h

#includestdarg.h

void?va_fun(int?start,...)

{

va_list?arg_ptr;

int?nArgValue?=?start;

int?nArgCount?=?1;

va_start(arg_ptr,start);

while(nArgValue?!=?-1)

{

printf("arg?%d?is:%d/n",nArgCount,nArgValue);

nArgValue=va_arg(arg_ptr,int);

++nArgCount;?

}

return;?

}

main()

{

va_fun(5,1,7,-1);

printf("................/n");

va_fun(2,4,-1);

printf("................/n");

va_fun(-1);

printf("................/n");

//va_fun();?可變參數(shù)函數(shù)最少要有一個參數(shù)。

}

名稱欄目:c語言函數(shù)字符串不定參數(shù) c# 不定參數(shù)的函數(shù)
標題鏈接:http://chinadenli.net/article14/hijcde.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航網(wǎng)站排名電子商務全網(wǎng)營銷推廣建站公司搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)