c语言程序中变量先引用声明,C语言如何跨文件调用函数定义中声明的变量
變量的作用域
我們知道,變量根據其作用域有全局變量和局部變量之分。全局變量作用域是整個文件,并且可以使用關鍵字?extern?達到跨文件調用的目的。但是局部變量值作用于它當前所在的塊(即該變量所處最內層中括號之間的區域),當函數執行完并離開當前塊后,局部變量及其所處內存空間的值就會銷毀。
static?關鍵字
static?+ 變量聲明 表示聲明的這個變量是靜態變量。靜態不是說它的值不會被改變,而是它在內存中的地址靜止不動,這也就意味著它的值從一直到函數運行結束之前,都不會被銷毀。有趣的是,它聲明的的變量只會聲明一次,再次調用聲明語句時,會自動跳過這條語句。如下面這段代碼:
#include
int main()
{
int i = 0;
printf("num1\tnum2\n");
for(i = 0;i<4;i++)
{ static int num1 = 4;
int num2 = 4;
num1 ++;
num2 ++;
printf("%d\t%d\n",num1,num2)
}
}
運行結果為:
可以看到static初始化的num1變量,雖然我們放在循環中,看起來好像每次都會對變量進行初始化,但是結果卻出人意表,num1在循環中沒有受到初始化語句的影響,可以正常的進行運算。
指針
指針是一個值為內存地址的變量(或數據對象)。指針本身是不具有內存的,但是它可以通過賦值,指向其他變量的地址進而得到它的內存。因為在計算機中,所有的變量都會有單獨一塊內存空間,所以理論上,只要使用指針指向變量的地址,就可以在程序的任何位置調用變量。所以,指針是我們實現跨文件跨域調用變量最重要的手段。
使用指針跨文件調用變量
有了上面的基礎,我們就可以開始調用變量了。為了表現跨文件的功能,我們定義一個頭文件?test.h?,并且在里面放入一個函數聲明?void Input();?,然后我們再創建一個?test.c?文件來作為頭文件的實現文件。最后在主文件?main.c?中調用它,函數代碼如下:
test.c文件
#include "test.h"
int *ptr; //聲明一個外部指針用來調用變量
void Input()
{
//初始化一個靜態的數組
static int nums[10] = {1,2,3,4,5,6,7,8,9,10};
ptr = nums; //將外部指針指向數組首地址
}
main.c文件
#include "test.h" //引用我們自定義的頭文件
#include
extern int *ptr; //調用我們的外部指針
int main()
{
Input(); //初始化數組并給指針賦值
//下面打印結果,驗證是否成功調用變量
for(int i = 0;i<10;i++)
{
printf("%d\t",*(ptr + i));
}
}
運行結果為
可以看到,我們通過一個外部指針,在?Input()?函數內部將指針指向變量的地址,成功的調用了在其他文件的函數內部聲明的數組/變量。
事實上,在這里面,static?關鍵字起到了至關重要的作用。我們嘗試將nums[]數組改成普通的自動(auto)變量,看看運行結果:
運行結果為
可以看到,循環打印出來的是一片混亂的數值,這意味著指針向內存的數值已經被銷毀了
閱讀原文
總結
以上是生活随笔為你收集整理的c语言程序中变量先引用声明,C语言如何跨文件调用函数定义中声明的变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抽脂一次多少钱啊?
- 下一篇: c语言实验报告管理系统,C语言实验报告-