目錄
零基礎 Python 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.簡介
回顧以下學習C 語言的第一個程序HelloWorld,代碼如下:
#include<stdio.h> //printf函數的聲明就在該頭文件中
void main()
{
//因為 stdio.h 包含了printf函數聲明,所以可以直接調用printf函數
printf("hello world");
}
stdio.h 頭文件包含了 printf 函數的聲明和定義,所以我們可以直接調用該函數;當然我們也可以跳轉到 stdio.h 頭文件中查看 printf 函數的聲明和定義:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - 函數聲明和調用
//@Time:2021/06/20 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
_CRT_STDIO_INLINE int __CRTDECL printf(
_In_z_ _Printf_format_string_ char const* const _Format,
...)
#if defined _NO_CRT_STDIO_INLINE
;
#else
{
int _Result;
va_list _ArgList;
__crt_va_start(_ArgList, _Format);
_Result = _vfprintf_l(stdout, _Format, NULL, _ArgList);
__crt_va_end(_ArgList);
return _Result;
}
#endif
printf 函數的實現原理,你可以不用管,你只需要明白如何傳遞參數即可,這就是函數調用的過程;
二.函數聲明和定義
函數聲明只是一個空殼,不會有具體的函數實現,而定義要實現函數的實現,例如:
1.函數聲明:不需要實現這個函數的功能
int sub(int x,int y); //只需要聲明即可,不需要實現這個函數的功能
2.函數定義:必須實現這個函數的功能
int sub(int x,int y) 需要實現這個函數的功能
{
return (x-y);
}
三.函數調用
函數在調用之前必須聲明或者定義,否則會報錯:找不到標識符,這也是為什么hello world中調用 printf 函數必須要包含 stdio.h 頭文件的原因;
我們觀察如下代碼:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - 函數聲明和調用
//@Time:2021/06/20 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include<stdio.h>
void main()
{
int ret = sub(2, 1); //函數調用
printf("ret:%d ", ret);
return ;
}
int sub(int x, int y) //函數定義
{
return (x - y);
}
編譯的時候報錯:
錯誤 C3861 “sub”: 找不到標識符
首先我們分析:程序首先進入 main 函數,然后調用 sub 函數,此時在調用之前都找不到 sub 的聲明,當然不知道 sub 是個什么玩意!!
解決辦法一:將函數定義在 main 前面,示例代碼如下:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - 函數聲明和調用
//@Time:2021/06/20 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include<stdio.h>
int sub(int x, int y)//函數定義
{
return (x - y);
}
void main()
{
int ret = sub(2, 1);//函數調用
printf("ret:%d ", ret);
return ;
}
解決辦法二:講函數聲明在 main 函數前面,只要有了函數聲明,函數不論是定義在 main 函數前面或者后面都無所謂,示例代碼如下:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - 函數聲明和調用
//@Time:2021/06/20 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include<stdio.h>
//函數聲明
int sub(int x, int y);
void main()
{
int ret = sub(2, 1); //函數調用
printf("ret:%d ", ret);
return ;
}
//函數定義
int sub(int x, int y)
{
return (x - y);
}
四.函數形參和實參
形參是函數定義的時候用的,實參是調用函數的時候用的,舉個例子:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - 函數聲明和調用
//@Time:2021/06/20 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
void fun(int a); /* 這里的a就是形參 */
int main()
{
int b = 1;
fun(b); /* b就是實參 */
}
五.猜你喜歡
- C語言邏輯運算符
- C語言三目運算符
- C語言逗號表達式
- C語言 sizeof 和 strlen 函數區別
- C語言 strcpy 和 strcpy_s 函數區別
- C語言 memcpy 和 memcpy_s 區別
- C語言 數組定義和使用
- C語言 數組遍歷
- C語言 數組下標越界
- C語言 數組內存溢出
- C語言 數組下標越界和內存溢出區別
- C語言 二維數組定義和使用
- C語言 二維數組行數和列數計算
- C語言 指針聲明和定義
- C語言 指針 p++ / p–
- C語言 p++/§++/_(p++)/_p++
- C語言 使用指針遍歷數組
- C語言 指針和數組區別
- C語言 數組指針
- C語言 指針數組
- C語言 指針數組和數組指針區別
- C語言 空指針 NULL
- C語言 void 指針
- C語言 野指針
- C語言 函數聲明和定義
- C語言 函數聲明和調用
未經允許不得轉載:猿說編程 » C語言 函數聲明和調用
本文由博客 - 猿說編程 猿說編程 發布!
