1樓:
自定義方法如果放在主函式的下面,需要進行函式說明。
解決方法:在主函式上面加上void print();
或者直接將自定義方法拿到主函式上面去,可以避免錯誤。返回值用return語句返回
2樓:匿名使用者
要呼叫沒有返回值型別的方法,你可以給他們設定同型別的引數,就可以呼叫了。。比如:
#include
void max(int a,int b) //宣告函式,並設定引數
void main()
3樓:斯坦恩貝格(北京)電子****
c語言中方法實際就是函式的呼叫。
自定義函式如果放在主函式的下面,需要進行函式說明,即在主函式上面加上函式宣告,或者在主函式上面定義自定義函式,可以避免錯誤。返回值用return語句返回。
4樓:許詩文
定義了一個簡單的函式func1, 呼叫的時候只需要"函式名()" 的方式就可以呼叫的到。(至於呼叫的過程是如何處理的,就要參考彙編的知識了。)
但是,在實際的開發過程中可能會遇到這種情況, 函式名事先並不確定,函式名是通過一個字串變數儲存的,這種狀況該如何呼叫呢?
更具體一點的例子,函式名是通過外部輸入進去了。
該如何執行func1呢?
解決以上問題之前, 首先引入函式指標的概念。
在c語言中,某一資料變數的記憶體地址可以儲存在相應的指標變數中,比如 int * , char * 等,
對於函式來說,也同樣如此,函式的首地址也可以儲存在某個函式指標變數裡,通過這個函式指標變數我們就可以呼叫所指向的函式了。
如何定義函式指標變數? 很簡單。
對應到上面 func1 函式,可以定義如下的指標變數。
void (*funcp)()
funcp這個名字可以隨便取。
/************************
* add by oscar999
************************/
func1()
void main()
有了如上的例子,不難想到:
如果事先定義一些函式指標,通過傳入的函式名字串,得到相應的函式指標,就可以實現函式呼叫了。
[cpp] view plaincopyprint?
/************************
* add by oscar999
************************/
#include
typedef void (*funcp)();
void func1()
void func2()
funcp getfuncpointer(char* sfuncname)
else if(strcmp(sfuncname,"func2")==0)
return null;
} void main()
}/************************
* add by oscar999
************************/
#include
typedef void (*funcp)();
void func1()
void func2()
funcp getfuncpointer(char* sfuncname)
else if(strcmp(sfuncname,"func2")==0)
return null;
}void main()
}你可能會想,通過傳入的string 直接呼叫對應的function不就可以了嗎?類似:
[cpp] view plaincopyprint?
/************************
* add by oscar999
************************/
#include
typedef void (*funcp)();
void func1()
void func2()
void main()
else if(strcmp(c,"func2")==0)
} /************************
* add by oscar999
************************/
#include
typedef void (*funcp)();
void func1()
void func2()
void main()
else if(strcmp(c,"func2")==0)
}以上這種對於 function 較少的狀況可以使用, 但是func很多的話, 或者動態的生成這部分的話,指標函式的方式就很好了。
函式名字串和函式指標放到一個name value set 中去, 這樣就可以很容易得到函式指標了。
5樓:匿名使用者
void main()
不知是樓主表述不清還是我理解能力下降了,你的問題咋這麼難看懂呢?
我的理解,你是說create返回時系統把記憶體收回了,主函式呼叫會記憶體出錯?但是你返回的是指標,系統會保護你已經申請到的記憶體。你再把create返回的指標傳給print,print就可以對你在create申請到的記憶體進行輸出操作了。
不知答對了沒有。。。
c語言中的sprint函式問題
6樓:好程式設計師
sprintf函式原型為 int sprintf(char *str, const char *format, ...)。作用是格式化字串,具體功能如下所示:
(1)將數字變數轉換為字串。
(2)得到整型變數的16進位制和8進位制字串。
(3)連線多個字串。
舉例如下所示:
1 char str[256] = ;
2 int data = 1024;
3 //將data轉換為字串
4 sprintf(str,"%d",data);
5 //獲取data的十六進位制
6 sprintf(str,"0x%x",data);
7 //獲取data的八進位制
8 sprintf(str,"0%o",data);
9 const char *s1 = "hello";
10 const char *s2 = "world";
11 //連線字串s1和s2
12 sprintf(str,"%s %s",s1,s2);
3、sscanf函式
sscanf函式原型為int sscanf(const char *str, const char *format, ...)。將引數str的字串根據引數format字串來轉換並格式化資料,轉換後的結果存於對應的引數內。
具體功能如下:
(1)根據格式從字串中提取資料。如從字串中取出整數、浮點數和字串等。
(2)取指定長度的字串
(3)取到指定字元為止的字串
(4)取僅包含指定字符集的字串
(5)取到指定字符集為止的字串
sscanf可以支援格式字元%:
(1)-: 表示範圍,如:%[1-9]表示只讀取1-9這幾個數字 %[a-z]表示只讀取a-z小寫字母,類似地 %[a-z]只讀取大寫字母
(2)^: 表示不取,如:%[^1]表示讀取除'1'以外的所有字元 %[^/]表示除/以外的所有字元
(3),: 範圍可以用","相連線 如%[1-9,a-z]表示同時取1-9數字和a-z小寫字母
(4)原則:從第一個在指定範圍內的數字開始讀取,到第一個不在範圍內的數字結束%s 可以看成% 的一個特例 %[^ ](注意^後面有一個空格!)
104、snprintf函式
snprintf函式是sprintf函式的更加安全版本,考慮到字串的位元組數,防止了字串溢位。函式形式為:int snprintf(char *restrict buf, size_t n, const char * restrict format, ...
);。最多從源串中拷貝n-1個字元到目標串中,然後再在後面加一個0。所以如果目標串的大小為n 的話,將不會溢位。
5、測試程式
1 #include
2 #include
3 4 #define ip_str_len 18
5 #define mac_str_len 18
6 #define mac_bit_len 6
7 #define little_endian 0
8 #define big_endian 1
9 10 typedef unsigned char uchar;
11 typedef unsigned int uint;
12 13 int big_little_endian()
14 20
21 uint ipstr2int(const char * ipstr)
22 34
35 char *int2ipstr(const uint ip, char *ipstr, const uint ip_str_len)
36 53
55 char *mac2str(const unsigned char *mac,char *mac_str,const uint mac_str_len)
56 62
63 int main()
64 ;
66 char mac_str[mac_str_len] = ;
67 unsigned char mac[mac_bit_len] = ;
68 const char *ipstr = "10.0.3.193";
69 unsigned int ip;
70 int2ipstr(167773121,ip_str,ip_str_len);
71 mac2str(mac,mac_str,mac_str_len);
72 ip = ipstr2int(ipstr);
73 printf("%s\n",ip_str);
74 printf("%s\n",mac_str);
75 printf("ip:%u\n",ip);
76 return 0;
77 }
程式執行結果如下所示:
c語言中如何函式的多次呼叫,c語言中如何乙個函式的多次呼叫
乙個函式只能有乙個返回值,指標可以返回多個,例如 void aaa int a,c int a,c a a c c a b c b 下面呼叫 a和 c.1.可以使用迴圈語句實現。例如while迴圈語句,計算機的一種基本迴圈模式。當滿足條件時進入迴圈,不滿足跳出。while語句的一般表示式為 whil...
C語言中的sprint函式問題,C語言中迴圈問題
好程式設計師 sprintf函式原型為 int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的16進位制和8進位制字串。3 連線多個字串。舉例如下所示 1 char str 256 2 int d...
C語言中的基本運算問題,C語言中的基本運算問題
有些運算操作是要區分有符號與無符號的情況的,比如除法,取模運算其計算語意是不同的,具體來說,有符號的除法在x86平台上對應的彙編指令是idiv,而無符號的除法對應的則是div。而對於另外一些操作運算,則是不區分有符號與無符號的,比如,加法,減法,乘法運算。可以通過以下 測試 int main 雙目運...