700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c 语言 int argc C语言深度学习之int main(int argc char **argv)的理解及延申

c 语言 int argc C语言深度学习之int main(int argc char **argv)的理解及延申

时间:2022-07-07 15:37:14

相关推荐

c 语言 int argc C语言深度学习之int main(int argc char **argv)的理解及延申

C语言深度学习之int main(int argc,char **argv)的理解及延申

前者为可接受 命令行参数,argc表示参数个数, argv[]是参数数组,其中第0个参数是程序本身的名称(包含路径)。

argv[]是一个字符数组.

argv[0]:指向程序的全路径名

argv[1]:指向在DOS命令行中执行程序名后的第一个字符串。

argv[2]:指向第二个字符串。

简单的说:main(int argc,char argv[])函数的两个形参,第一个int argc,是记录你输入在命令行上的字符串个数;第二个argv[]是个指针数组,存放输入在命令行上的命令(字符串)。

argc == 1 就是说参数的个数为1.

argv是字符串数组,存的是参数,定义为char**或者char* argv[]

【举例】

比如你编译好的程序为my.exe

(1)在命令行执行 my.exe

则:此时argc就是1,接受参数是1个,即参数argv[0]是”my.exe”

(2)在命令行执行 my.exe 1 2 3

则:此时argc就是4,接受参数是4个,即参数argv[0]是”my.exe”,argv[1]是”1”,argv[2]是”2”,argv[3]是”3”;

输入参数和输出参数

1.输入参数,是函数的调用者,传递给函数的实现者,对函数来说,是函数外部传入给函数内部使用的输出参数,是函数的实现者,传递给函数的调用者,对函数来说,是函数内部返回给函数外部的。需要说明的是,有些参数,即是输入参数又是输出参数;

2.输出参数可以有多个,返回值只能有一个。输出参数有时候又是输入参数,返回值没有这种情况

当函数只有一个输出时,即可以采用输出参数的方式,也可以用返回值的方式;

3.到底是不是输入参数和输出参数,要看函数的定义以及如何实现的了输出参数的初始化,没有强制要求,最好初始化一下 。

函数为什么需要形参和返回值

(1)函数名是一个符号表示整个函数代码段的首地址,

实质是一个指针的常量,指针常量指向这个函数

用到的函数名都是当地址用的,用来调用这个函数的。

(2)函数体是函数的关键,由一对{}括起来,包含很多句代码。

函数体就是函数实际上做的工作。

(3)形参的列表和返回值

形参是函数的输入部分,返回值是函数的输出部分,

对函数最好的理解就是把函数理解成一个加工的机器。

把数据进行加工,得到输出值。

程序其实就是数据的加工器。

那么我们形参的列表就是这个机器的原材料的输入端,而返回值就是机器的成品输出端。

(4)其实如果没有形参列表,函数也能对数据进行加工,用全局变量就可以了。

在嵌入式里面,除了你的产品占用的结构体,其它地方最好不要用到全局变量。

因为全局变量是非常的耗费内存的,所以我们要总是使用局部的变量。

形参和实参解释

C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。

形参(形式参数)

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。

实参(实际参数)

函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。

形参和实参的联系和区别

形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。#include

//计算从m加到n的值

int sum(int m, int n) {

int i;

for (i = m+1; i <= n; ++i) {

m += i;

}

return m;

}

int main() {

int a, b, total;

printf("Input two numbers: ");

scanf("%d %d", &a, &b);

total = sum(a, b);

printf("a=%d, b=%d\n", a, b);

printf("total=%d\n", total);

return 0;

}

运行结果:

Input two numbers: 1 100↙

a=1, b=100

total=5050

在这段代码中,函数定义处的 m、n 是形参,函数调用处的 a、b 是实参。通过 scanf() 可以读取用户输入的数据,并赋值给 a、b,在调用 sum() 函数时,这份数据会传递给形参 m、n。

从运行情况看,输入 a 值为 1,即实参 a 的值为 1,把这个值传递给函数 sum() 后,形参 m 的初始值也为 1,在函数执行过程中,形参 m 的值变为 5050。函数运行结束后,输出实参 a 的值仍为 1,可见实参的值不会随形参的变化而变化。

以上调用 sum() 时是将变量作为函数实参,除此以外,你也可以将常量、表达式、函数返回值作为实参,如下所示:

total = sum(10, 98); //将常量作为实参

total = sum(a+10, b-3); //将表达式作为实参

total = sum( pow(2,2), abs(-100) ); //将函数返回值作为实参

形参和实参虽然可以同名,但它们之间是相互独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。

更改上面的代码,让实参和形参同名:

#include

//计算从m加到n的值

int sum(int m, int n) {

int i;

for (i = m + 1; i <= n; ++i) {

m += i;

}

return m;

}

int main() {

int m, n, total;

printf("Input two numbers: ");

scanf("%d %d", &m, &n);

total = sum(m, n);

printf("m=%d, n=%d\n", m, n);

printf("total=%d\n", total);

return 0;

}

运行结果:

Input two numbers: 1 100

m=1, n=100

total=5050

调用 sum() 函数后,函数内部的形参 m 的值已经发生了变化,而函数外部的实参 m 的值依然保持不变,可见它们是相互独立的两个变量,除了传递参数的一瞬间,其它时候是没有关系的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。