當前位置:首頁 » 編程軟體 » 編譯原理形參

編譯原理形參

發布時間: 2022-09-06 19:25:06

『壹』 c函數形參如果沒有名字,只有類型,在下面使用的時候,怎麼使用

定義的時候確實可以不寫形參名字。
你如果學了編譯原理的話可以知道函數間是如何傳參的(大多語言是通過棧),
c語言是第n個參數先壓棧,再壓第n-1個,。。。再壓第一個。最後修改棧頂指針add esp,8。
當進入函數時都是
push ebp
mov ebp,esp
所以可以這么實現
//VS2010環境
void f(int,int)
{
int a,b;
__asm //這是嵌入匯編關鍵字,在VC6.0嵌入匯編好像是asm
{
mov eax,[ebp+8]
mov a,eax ;第一個參數
mov eax,[ebp+12]
mov b,eax ;第二個參數
}
printf("%d\t%d\n",a,b);
}
void main()
{
f(7,3);
}

『貳』 靜態存儲分配和動態存儲分配之間有什麼不同 編譯原理

myisam_recover=64K#允許的GROUP_CONCAT()函數結果的最大長度transaction_isolation=REPEATABLE-READinnodb_file_per_table

『叄』 編譯原理題目。。給100分

是VB啊 我好久沒弄了,先學習下

『肆』 一些關於編譯原理的題目(選擇,判斷)

2年前還會做,現在都忘了

『伍』 第32題 為啥D是對的 不是說形參數組除一維長度以外 其他維度長度需要相等嗎

可以用二維數組名作為實參或者形參,在被調用函數中對形參數組定義時可以指定所有維數的大小,也可以省略第一維的大小說明,如:

void Func(int array[3][10]);

void Func(int array[][10]);

二者都是合法而且等價,但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:

void Func(int array[][]);

因為從實參傳遞來的是數組的起始地址,在內存中按數組排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多 少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:

void Func(int array[3][]);實參數組維數可以大於形參數組,例如實參數組定義為:

void Func(int array[3][10]);

而形參數組定義為:

int array[5][10];

這時形參數組只取實參數組的一部分,其餘部分不起作用。

[原文結束]

大家可以看到,將二維數組當作參數的時候,必須指明所有維數大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。大家在學編譯原理這么課程的時候知道編譯器是這樣處理數組的:

『陸』 C語言串賦值操作,形參有些不懂,int strassign(Str &str,char *ch)目的是將常量字元串賦給str

在int strassign(Str &str,char *ch)中,str是引用傳遞,ch是以'\0'結束的字元串,無論ch是字元數組,還是字面常量,都會將形參的首地址作為指針傳遞給被調函數,在所給實例中,形參是字面常量,編譯器會在「棧」中分配空間用以存放字面常量,這與在主調函數中用字元數組或指針調用完全一樣。

『柒』 有關c程序 的問題。函數作為形參的問題

#include <stdio.h>

int main()
{
int fac(int n);
int sum(int m,int n);
int n,a;
scanf("%d",&n);
printf("%d!=%d\n",n,fac(n));
a=fac(n);
printf("%d\n",sum(a,n));
return 0;
}

int fac(int n)
{
int f;
if (n==0||n==1)
f=1;
else if (n<0)
printf("data error");
else
f=n*fac(n-1);
return(f);

}

int sum(int m,int n)
{
int i,f=0;
for(i=1;i<=n;i++)
f=f+fac(i);
return(f);
}
我幫你改了下,能用了.
int sum(int fac(int n),int n)
這里定義形參時出錯了。形參是一個變數,代表著被調用時分配的內存單元的名字,不能用 fac(int n)。
函數被調用時,是實參傳遞給形參值,即就是把實參代表的內存單元的值賦值給了形參,在函數調用完時,再返還一個函數的值,這個值可以再賦值給被的變數或著直接用printf()函數輸出這個值。
樓上的網址我也看了,不過還沒學過那個用法。~-~
一會去試試。~-~

『捌』 C#的可選參數,為什麼一定要放在參數列表的最後

這涉及到編譯原理了,一般地,函數的形參(如果有的話),函數的形參入棧是由左至右入棧,排第一的形參被第一個壓入棧里,成為棧底元素,關鍵點就這里,因為形參的第一個參數必須是確定的,由此,編譯器系統才可以對函數開辟一個保存形參的棧區,然後第一個之後的元素陸續入棧。如果是把可選的參數排在前面,由於它是不確定的,編譯系統無法預知何時才會需要對函數開辟一個保存形參的棧區。所以,.NET的編譯器規定必須把可選的形參統統放在最後。

熱點內容
咋看電腦的伺服器地址 發布:2025-03-20 19:16:16 瀏覽:261
康拓2演算法 發布:2025-03-20 19:11:49 瀏覽:596
跨平台編譯語言有哪些 發布:2025-03-20 19:08:25 瀏覽:780
音樂appftp安卓 發布:2025-03-20 19:03:24 瀏覽:305
家長申述驗證的密碼是什麼 發布:2025-03-20 18:55:27 瀏覽:9
編譯原理與技術第二版下載 發布:2025-03-20 18:55:26 瀏覽:938
怎麼寫編程語言 發布:2025-03-20 18:42:52 瀏覽:688
我去密碼是多少 發布:2025-03-20 18:12:28 瀏覽:542
方舟編譯器啥時候開始 發布:2025-03-20 18:11:40 瀏覽:959
常用java類 發布:2025-03-20 18:07:06 瀏覽:202