命令行参数
在命令行执行c程序时,可以输入命令行参数并传递给main函数的形参,然后进程就得到了命令行的参数。其实在命令行执行c++、java程序时,也可以使用同样的方法,给进程传递命令行参数。
命令行参数的用处
我们在前面内容,实现了一个my_ls程序,用于模拟ls命令,显示文件属性,执行my_ls时,就需要跟接参数。
所有命令(程序:ls)的选项和参数,都是通过命令行参数得到的,所以对于命令行来说,命令行参数是很有用的。
严格意义来讲,程序和参数都是命令行参数,跟在程序后面的参数实际上是前面程序的参数。
整个一行都是命令行参数,一个程序后面可以跟多个程序的参数。
代码演示
打印命令行参数:
#include <stdio.h>
int main(int argc ,char ** argv)
{
int i = 0;
for(i = 0;i<=argc;i++)
{
printf("%s",argv[i]);
}
printf("\n");
for(int i = 0;argv != NULL;i++)
printf("%s",argv[i]);
printf("\n");
return 0;
}
第一个参数永远都是程序名。
将命令行参数传递给main函数形参的过程:
C内存空间布局
程序运行的大致过程
c程序运行时,是运行在内存上的,也就是说需要在内存上开辟出一块空间给c程序,然后将C代码会被从硬盘拷贝到内存空间上运行,至于说是不是将代码全部会被拷贝到内存上,这就不一定的了。有些是全部拷贝,有的是拷贝,当前要运行的那一部分,运行完了再拷贝其它部分当运行有OS,而且OS提供了虚拟内存机制时,基本都是这种的情况。
运行时需要要在内存开辟出一段空间,然后把代码从硬盘拷贝到内存上,那么所开辟出的这段内存空间,就是c程序的内存空间。程序的内存空间。
c程序的内存空间结构
有结构的要求吗?
有,这段空间必须布局为c程序运行所需的空间结构,c程序才能运行比如程序在调用函数时需要用到“栈”这个东西,那么就必须在内存空间中构建出“栈”,否者c序程序没办法实现函数调用。
如果空间没有布局好,进程将无法运行,因此进程空间(c程序的内存空间)也是非常重要的进程环境。
这就好比你租了写字楼的某层开了家公司,但是这个空间肯定是需要被布局为你要的结构的,如果空间不布局的话,你公司怎么运作起来。
c的内存结构是谁来构建的?
由启动代码来搭建的,比如启动代码会把c内存空间的某一部分空间,构建为“栈”,也就是说以“栈”的方式来管理这片内存。
c程序的内存空间也其实也叫“进程空间”因为c程序在内存中运行起来后就是进程了,所以c程序的内存空间也其实也叫“进程空间”。
不光是C程序所有超级语言的程序在运行时,都涉及内存空间的结构布局,不过它们的结构都是相似的,理解了C的内存空间布局,自然也理解其他程序的内存空间结构。
c程序代码在内存上运行起来后,它就是一个进程,所以程序代码在内存上所占用的空间,也称为进程空间。c程序空间对于c程序运行非常重要,如果没有在内存中布局出这个空间环境,程序将无法运行起来。
库
我们写程序时,是绝对不可能从零开始写代码的,都是要依赖被人所写的代码的,比如别人写的库,所以库也是程序非常重要的运行环境,没有库的支持,我们的程序根本做不了重要的事情。有关C语言库这一块,我们也在C语言中做了详细讲解,所以这里将其省略。