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語言中的問題,幾個C語言中的問題???
是二進位制位運算,意思是按位求與 假設i 5 二進位制就是101 i 1 就是 101 001 結果001 i 2 就是101 010 結果是000 i 4 就是 101 100 結果是 100 if i 4 的意思是 如果i的二進位制的第三位為1那判斷結果就是真,比如對於i 4,5,6,7 i 4...
c語言中的函式呼叫
include int fun1 int x,int y,int z int fun2 int x,int y,int z int main void int fun1 int x,int y,int z int fun2 int x,int y,int z 你要使用,你寫的函式求出的值,那就要有個...