① c語言如何傳送參數
main()主函數
每一C 程序都必須有一main()函數, 可以根據自己的愛好把它放在程序的某
個地方。有些程序員把它放在最前面, 而另一些程序員把它放在最後面, 無論放
在哪個地方, 以下幾點說明都是適合的。
1. main() 參數
在Turbo C2.0啟動過程中, 傳遞main()函數三個參數: argc, argv和env。
* argc: 整數, 為傳給main()的命令行參數個數。
* argv: 字元串數組。
在DOS 3.X 版本中, argv[0] 為程序運行的全路徑名; 對DOS 3.0
以下的版本, argv[0]為空串("") 。
argv[1] 為在DOS命令行中執行程序名後的第一個字元串;
argv[2] 為執行程序名後的第二個字元串;
...
argv[argc]為NULL。
*env: 安符串數組。env[] 的每一個元素都包含ENVVAR=value形式的字元
串。其中ENVVAR為環境變數如PATH或87。value 為ENVVAR的對應值如C:\DOS, C:
\TURBOC(對於PATH) 或YES(對於87)。
Turbo C2.0啟動時總是把這三個參數傳遞給main()函數, 可以在用戶程序中
說明(或不說明)它們, 如果說明了部分(或全部)參數, 它們就成為main()子程序
的局部變數。
請注意: 一旦想說明這些參數, 則必須按argc, argv, env 的順序, 如以下
的例子:
main()
main(int argc)
main(int argc, char *argv[])
main(int argc, char *argv[], char *env[])
其中第二種情況是合法的, 但不常見, 因為在程序中很少有隻用argc, 而不
用argv[]的情況。
以下提供一樣常式序EXAMPLE.EXE, 演示如何在main()函數中使用三個參數:
/*program name EXAMPLE.EXE*/
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[], char *env[])
{
int i;
printf("These are the %d command- line arguments passed to
main:\n\n", argc);
for(i=0; i<=argc; i++)
printf("argv[%d]:%s\n", i, argv[i]);
printf("\nThe environment string(s)on this system are:\n\n");
for(i=0; env[i]!=NULL; i++)
printf(" env[%d]:%s\n", i, env[i]);
}
如果在DOS 提示符下, 按以下方式運行EXAMPLE.EXE:
C:\example first_argument "argument with blanks" 3 4 "last but
one" stop!
注意: 可以用雙引號括起內含空格的參數, 如本例中的: " argument
with blanks"和"Last but one")。
結果是這樣的:
The value of argc is 7
These are the 7 command-linearguments passed to main:
argv[0]:C:\TURBO\EXAMPLE.EXE
argv[1]:first_argument
argv[2]:argument with blanks
argv[3]:3
argv[4]:4
argv[5]:last but one
argv[6]:stop!
argv[7]:(NULL)
The environment string(s) on this system are:
env[0]: COMSPEC=C:\COMMAND.COM
env[1]: PROMPT=$P$G /*視具體設置而定*/
env[2]: PATH=C:\DOS;C:\TC /*視具體設置而定*/
應該提醒的是: 傳送main() 函數的命令行參數的最大長度為128 個字元 (包
括參數間的空格), 這是由DOS 限制的。
② C語言中的參數傳遞方式有哪些
是函數參數的傳遞方式吧。c語言的話是:值傳遞和指針(地址)傳遞。c++的話除了c語言的兩種方式外還有引用傳遞。
③ 在C語言中參數是如何傳遞的
通過參數列表來傳遞
c 語言函數的基本結構
- 返回值類型;
- 函數名;
- 參數列表,參數列表中的參數類型;
- 函數體。
④ c語言函數參數傳遞方向
C語言中函數參數傳遞的三種方式(1)傳值,就是把你的變數的值傳遞給函數的形式參數,實際就是用變數的值來新生成一個形式參數
⑤ 在C語言中,函數實參與形參之間的數據傳遞方式是( )傳遞方式。
函數實參與形參之間的數據傳遞方式是( 值傳遞)傳遞方式,在C語言中,數據傳遞方式有值傳遞和引用傳遞,值傳遞:傳值,實際是把實參的值賦值給行參,相當於。
那麼對行參的修改,不會影響實參的值 。引用傳遞: 實際是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的賦值,那麼傳地址以後,實參和行參都指向同一個對象,因此對形參的修改會影響到實參。
(5)c語言參數傳送擴展閱讀
傳值調用中,只使用了實參的值。傳值調用機制里,形參是一個局部變數,其初始值為相應實參的值。在引用調用機制里,將實參的地址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。
引用傳遞是將變數的內存地址傳遞給方法,方法操作變數時會找到保存在該地址的變數,對其進行操作。會對原變數造成影響。可以將一個變數通過引用傳遞給函數,這樣該函數就可以修改其參數的值。
⑥ C語言函數調用參數傳遞的是什麼
ARM編程中使用的C語言是標准C語言,ARM的開發環境實際上就是嵌入了一個C……當進行函數調用時,使用r0和r1實現參數傳遞,返回結果由r0帶回。函數調用
⑦ C語言 參數傳遞問題
#include<stdio.h>
#include<malloc.h>
char*gn1(chara[],intlength)
{
char*b=(char*)malloc(length*sizeof(char));
inti,k=0;
for(i=0;i<length;i++)
{
intj=0x80;
for(;j;j>>=1)
if(j&a[i])
b[k++]=1;
else
b[k++]=0;
}
returnb;
};
intmain()
{
chara_1[6],*b_1;
inti_1;
for(i_1=0;i_1<6;i_1++)
scanf("%c",&a_1[i_1]);
b_1=gn1(a_1,6);
for(i_1=0;i_1<48;i_1++)
printf("%d",(int)b_1[i_1]);
return0;
}
⑧ C語言數組當參數傳遞
在學習C語言的過程中遇到數組作為參數傳遞的問題
一維數組:
這樣我們可以很順利的在test去遍歷這個數組a,當然我們還可能傳遞指針:
一般來數參數的傳遞是值傳遞,也就是說實參傳給形參,形參發生改變時實參並不會改變,(單向)但是數組在傳遞的時候是地址傳遞,只要形參發生了變化,實參也會發生變化(雙向)。
這樣傳遞數組就會發現一個問題,我沒有辦法獲取到數組的長度。獲取數組的長度我們一般用:
我們會發現n的值一直是2!為什麼會這樣呢!?
因為,a是函數參數,到了本函數中,a只是一個指針(地址,系統在本函數運行時,是不知道a所表示的地址有多大的數據存儲空間,這里只是告訴函數:一個數據空間首地址),所以,sizoef(a)的結果是指針變數a占內存的大小,一般在64位機上是8個位元組。int類型是4個位元組,所以,結果永遠是2,因此,我們要向獲取數組長度要怎麼辦呢?
我可以在初始化數組的地方獲取到數組的長度,作為參數傳遞過來:
這樣做我們可以獲取到數組的長度。
二維數組:
二維數組作為參數傳遞是後我們不可以像以為數組那樣直接,如:
會發現編譯都編譯不通過,報「[Error] declaration of 'a' as multidimensional array must have bounds for all dimensions except the first」這個錯,意思是多維數組的定義必須有一個除第一個之外的所有維度的邊界,比如:
這樣就OK了,但是我們是動態分配的數組不知道這個維度是多少的時候怎麼辦?這時候我們可以用指針當做一維數組來操作:
這樣我們發現不能更靈活的去定位到某一行某一列,這樣我們需要手工改變定址方式:
⑨ c語言函數調用時,參數是如何傳遞的
建立中間變數(形參),把實參值賦值給中間變數,當被調函數返回值時,系統釋放掉中間變數。
在程序中通過對函數的調用來執行函數體,其過程與其它語言的子程序調用相似。對無參函數調用時則無實際參數表。實際參數表中的參數可以是常數、變數或其它構造類型數據及表達式。各實參之間用逗號分隔。
函數作為表達式中的一項出現在表達式中,以函數返回值參與表達式的運算。這種方式要求函數是有返回值的。例如:z=max(x,y)是一個賦值表達式,把max的返回值賦予變數z。
(9)c語言參數傳送擴展閱讀:
C語言中又規定在以下幾種情況時可以省去主調函數中對被調函數的函數說明。
1、如果被調函數的返回值是整型或字元型時,可以不對被調函數作說明,而直接調用。這時系統將自動對被調函數返回值按整型處理。例8.2的主函數中未對函數s作說明而直接調用即屬此種情形。
2、當被調函數的函數定義出現在主調函數之前時,在主調函數中也可以不對被調函數再作說明而直接調用。例如例8.1中,函數max的定義放在main 函數之前,因此可在main函數中省去對max函數的函數說明int max(int a,int b)。
3、如在所有函數定義之前,在函數外預先說明了各個函數的類型,則在以後的各主調函數中,可不再對被調函數作說明。