⑴ c語言里如何調用匯編里的變數
語言混編一般是模塊化的,模塊之間相對獨立的,不能直接調用,必須遵循一定的約定,才能將模塊融合為一體;各種編程語言的共通點就是代碼編譯後最終都成為機器代碼,當然也可以用匯編語言作為中間代碼,再由匯編代碼編譯成機器代碼;比如說C語言寫成dll形式,另的語言調用dll來完成代碼共用。要在c語言里調用匯編里的變數,首先要理解匯編里的變數是如何存放的,因為C語言的實現又跟操作系統有關,所以又必須理解C語言在這個系統里是如何實現的。用匯編語言寫個call,c語言里按照這個call約定調用這個call,就可以調用call裡面的變數了。
⑵ 如何在一個.c文件里調用另一個.c文件里的變數
變數要定義為全局變數,就是要在函數體外面定義變數,同時不能加關鍵字static靜態的,靜態全局變數只能在本文件內使用,你先在一個文件中定義變數,比如:
#include
int
a;
int
main()
{
}
在另外的文件中,如果你想要使用變數a,那麼首先要extren
int
a;extren關鍵字的意思是到其他文件中尋找,這樣你就可以在其他文件中使用變數a了,注意全局變數會自動初始化為0,如果你不初始化,同時全局變數的值會保存到靜態存儲區直到整個程序運行結束的
⑶ c語言結構體變數怎麼使用
結構體變數簡稱為結構變數,它由結構類型定義,有三種定義方法。下面以定義結構類型 book 和結構變數mybook 、 storybook 為例說明之。
1. 先定義結構類型,再定義結構變數。
struct book /* 定義結構體類型 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} ;
struct book mybook, storybook;
用這種方法定義結構變數,是最常用的方法,但須注意不能省略關鍵字「 struct 」。還可以在定義結構變數的同時給它的成員賦初值。如:
struct book /* 定義結構體類型 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} ;
struct book mybook = { 「maths」, 24.7, 「 電子社 」, 「zhao」 }, storybook;
則, mybook 變數的 price = 24.7 。
2. 定義結構類型的同時定義結構變數。
struct book /* 定義結構體類型 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} struct book mybook, storybook;
3. 不定義結構類型,直接定義結構變數。
struct /* 不定義結構類型名 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} struct book mybook, storybook;
需要說明的是,當某結構類型的成員又是另外一個結構類型時,稱嵌套定義,其定義方法如下:
struct brith_date
{
int month ;
int day ;
int year ;
} ;
struct
{
char name[10] ;
char address[30];
char tel[12];
int age;
struct data birthday;
char sex[3];
} student_01 , employee ;
此例直接定義了 student_01 和 employee 兩個變數,但是沒有定義此結構體的名字,因此不能再定義與student_01 和 employee 同類的其它結構變數了!如下行定義是錯誤的:
truct boy, girl;
⑷ c語言 如何調用另一函數變數
局部變數是不能在函數之間相互調用的,你要是一定要做,可以用extern進行聲明。
有一個簡單的方法,就是把temp定義成全局變數就行了。
int temp;
void main(void)
{ int a=0,b=1;
for (;b<11;b++)
{ temp=b;
b=a+b;
a=temp;
}
void NEED (void)
{ int c,d;
d= temp;
}
⑸ 關於C語言中變數在兩個.C文件中的調用問題
我有幾個方案,我經常在VC下使用,都沒問題,你試試:
方案1:在一個文件中定義全局變數「類型 tmp;」,注意是全局變數。另一個文件全局變數的位置使用「extend 類型 tmp;」。
方案2:把hal.c文件里的函數參數加一個指向tmp的指針,tmp在main中,在hal.c里的文件使用tmp時,把地址傳過去就行了。
例如:
mian()
{
char tmp;
.....
.....
}
function(&tmp;...;...);
...
}
在hal.c裡面
function(char *tmp;...;...)
{
....
}
這樣就行了
方案1、2都不用hal.h
方案3:你把hal.c的子函數寫進hal.h,在mian函數之前include一下就行了。
但不推薦此方法。
對你出現的問題的理解:
你在hal.h中聲明了tmp,在兩個文件里都包含它,表示包含了兩次,C語言規定如果沒有限定為局部變數,則各個文件都可以調用,這就導致你聲明了兩個名稱相同的同類型變數,當然不行。
如果定義為局部變數,那麼另一個文件就沒辦法用它了,或者這么說:兩個文件各有一個tmp但不是同一個tmp,改變一個的值,另一個不變。
常用方法就是extend一下(方案1)。
順便說一句,我從來沒用過unsigned char類型,因為char類型本身就是非負的,可能是因為編譯器的關系吧
⑹ C語言如何定義函數,函數中要調用其他變數!
a為main函數中的局部變數,在函數zjsx中是不可見的,應該以入參的形式把a傳入zjsx中。
void zjsx(int a);
int main()
{
int a=0;
zjsx(a);
return 0;
}
void zjsx(int a)
{
printf("a的值為%d
",a);
}
⑺ C語言里, 一個函數怎調用,另一個函數的變數(不用返回)
已經有人給你那麼多方法了。。。我還是建議不要用extern去使全局變數,也不要把變數定義在頭文件,然後用include把變數包含進其它源文件使用,不要這樣做!這是菜鳥的做法!正確的做法是這樣的,你把變數定義在相應的源文件中,定義成全局的,然後寫一個介面去讀取,充分利用封裝的思想!我舉個例子哈:加入你的變數名是A,定義在abc.c中。。。這時候你的正確做法是在abc.c中寫一個函數,命名為intGetAValue(void){returnA;}這才是大神的做法!這樣的話如果是在同一個源文件中,可以直接訪問全局變數達到目的。如果是在不同的源文件的其它函數,就調用你寫好的GetAValue()函數去讀取!⑻ c語言如何在一個cpp中使用另一個cpp的變數
第一、要想跨文件使用同一個變數,該變數必須定義成全局變數第二、在另外的文件引用文件外的全局變數,引用者必須用extern來聲明變數。第三、必須在函數中去操作該變數如:1.cpp:void func() ;int n ;int main(){ n=1; func() ; return 0;}2.cpp#include <iostream>extern int n;void func(){ std::cout << "n="<<n <<std::endl ;}⑼ C語言 過程中調用主函數變數
可以的,但最好提供長度參數,並且不要用0判斷是否有效數字(因為0本身可能就是有效數字)
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
int f(int* a,int l,int n,int i) //a:源數組 l:a有效數字長度,n:插入的數字,i,位置
{
int *b=(int*)malloc(sizeof(int)*(l-i-1)); //臨時數組b
memcpy(b,a+i,(l-i-1)*sizeof(int)); //把&a[i]開始的數據復制到b;
a[i]=n;
memcpy(a+i+1,b,(l-i-1)*sizeof(int));//復制回來
free(b);
return 0;
}
int main()
{
int a[9]={1,2,3,4,5};
int i;
f(a,6,8,2); //可以用各種辦法獲得第二個參數,或者直接就給數組的總長度
for(i=0;i<6;i++)
{
printf("%d ",a[i]);
}
return 0;
}
⑽ C語言變數的定義與使用
變數的存儲類別決定了變數中的數據在計算機內存中的存儲位置。C語言中局部變數存放在動態存儲區,全局變數或者靜態變數存放在靜態存儲區。下面是關於C語言變數的定義與使用,歡迎參考!
如果要為單片機控制系統編寫出高質量的C語言程序,合理的定義並使用變數是非常重要的。程序是用來處理數據的,而變數就是用來存儲數據的。每定義一個變數,編譯器就會在系統的RAM中分配一個物理存儲區域。在單片機控制系統中,RAM資源是非常有限的,作為單片機程序員,絕對不能隨意的定義變數,需要精打細算合理定義。為了實現這個目標,必須要對變數的多個特性有深刻的認識。
變數特性:
第一、變數定義要選擇恰到好處的類型,變數的類型直接決定了它所存儲的數據取值范圍,這類似於我們生活中使用的各種容器,選擇合適的變數類型,不但能保證數據存儲安全,還能有效的節約系統資源;
第二、變數的作用范圍必須清楚,C語言最基本的功能單元是函數,在函數內部使用的變數是私有變數,只能在函數內部使用。多個函數組成一個程序的功能模塊,並安置在某一個C文件中,在這些函數的頭部定義的變數是靜態變數(局部變數),這種類型的變數模塊內部的函數都可以訪問。如果在模塊內部聲明變數,並在該模塊的頭文件中導出,該類型變數就是全局變數,全局變數在整個工程中的所有函數都可以訪問;
第三、變數佔用的RAM資源,私有變數是可以釋放的,靜態變數與全局變數是不可以釋放的。也就是說在程序運行的整個過程中,私有變數佔用資源可以供不同的函數重復利用,而靜態變數與全局變數是完全被佔用不能重復利用的;
第四、變數可以存放常數,但因為單片機RAM資源有限,強烈建議不要用變數存放常量,而是在資源相對豐富的FlashROM中存放常量;
第五、局部變數與全局變數對於函數來說,訪問非常方便,但缺點顯而易見:訪問的函數越多,數據的安全性越低,一旦出現數據異常,很難排除問題。所以,請盡量減少局部變數與全局變數的使用;
第六、函數的型參個數盡量減少,這樣型參只會佔用通用寄存器組來完成參數傳遞工作。如果參數過多,編譯器可能會被迫分配佔用RAM資源,這樣不但參數傳遞效率變低,同時還會導致RAM資源浪費;
明確上述變數定義與使用特點後,在編寫程序的時候,一定要利用好這些特性並結合程序的特點,靈活的使用各種類型、各種作用范圍的變數,使程序在最大限度上得到優化,使系統性能提升至最優的狀態,才是我們嵌入式開發者的終極目標!
拓展:C語言入門學習
什麼人需要學習C語言?
從51JOB的統計數據來看,選擇C語言人才的企業多數以電子工程師、嵌入式工程師、硬體工程師、IOS工程師等為主,學歷本科以上相關專業,三年以上工作經驗,且外語水平要求至少四級以上。既然C語言學習者的就業門檻那麼高,為什麼還有很多人執著的去學習C語言呢?總結而言,無外乎以下幾點原由:
1)C語言不是面向對象語言。
因為這一點,任何學習C語言的人必須學會用函數思考問題。當你真正的去學習一門面向對象語言時,就會有C語言的函數學習基礎去對比。這會使學習面向對象編程更容易理解和更有樂趣。
2)用C編程就像進行智力體操。
你要顧及到每一件事情,而這在很多其他語言中他會為你處理。你要管理指針,內存分配,和內存回收。你要明白如何處理串,還有動態數據。在其他語言中,所有這些對你來說是隱藏的。你不知道他們如何運行,更不用說改變他們的運行方式了。你得到了使用的便利,失卻了對程序的控制和速度。很多情況下,這是筆值得的買賣。其他的情況下就不是這樣了。
3)不同情況下你會使用不同的編程語言。
某些情況下要求使用Lisp,其他的要Java,還有別的要C++。但是C是你堅實的基礎。你可能不會使用它做一些項目,但是它會幫助提高你的能力,熟練的用其他語言編程。
4)除了匯編語言之外,C代碼生成的程序比其他任何語言生成的程序來得更小和運行更快。
那麼為什麼不學匯編語言呢?匯編是一門學了很有用的.語言,但是它沒有C那樣的可移植性,並且其他流行的語言比如JAVA的語法是基於C的,而不是匯編。你仍然應該學匯編,但它並不會證明它會像學C那樣有用。
5)如果你想要寫一個視頻游戲引擎或操作系統,你會需要C。
你不能使用C#, Java, 或 Basic來完成這些編程任務。
C語言的發展史:
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。它的應用范圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。
我適合學習C語言嗎?
首先我們要認清一個事實:C語言工作者只是眾多從事軟體開發者中的一小部分,在深圳這樣一個IT企業雲集的大城市,使用其它語言從事軟體開發的工作者多如牛毛,薪資待遇不比從事C語言開發的人低,當編程愛好者在選擇第一個編程語言時,C語言不一定是首先。我適合學習C語言嗎?解決這個問題,先回答以下幾個問題:
1)你學習C語言的目的是什麼?如果是想從事這方面的工作,那麼請義無反顧的堅持下去,推薦你在《微機原理》、《計算機組成原理》和《計算機系統結構》三本書中選一本配合《C語言程序設計》來看,這樣可以融匯貫通,讓你對編程有更深入更系統化的理解。而這種理解對計算機類學科的學習來說很重要。
2)您具備學習C語言的條件嗎?由於入職C語言編程的企業對入職者的要求比較高,在沒有編程工作經驗前提下多數想通過自學進入類似企業的人幾乎為零,包括很多計算機專業畢業的大、中專畢業生在校期間都會學到C語言,畢業出來後依然雲里霧里。C語言的開發,需要在實際工作中才能快速掌握。同時,英語(從事C語言開發需要經常查閱英文資料,尤其是單片機領域)、學歷、數學演算法、極強的邏輯思維能力等等也是讓多數人望而卻步的門檻。