main()中的参数是什么
Created|Updated|programming languages
|Post Views:
前言
在步入命令行编译程序和C语言的学习时,会涉及到我在编写主函数int main()中有关main参数的问题。
了解
- 命令行输入中会有一个又一个以空格间隔的字符串。
例如:./test这是执行命令时的一个字符串。 - 在执行程序时,从命令行中穿给C程序的值,称为命令行参数。
main中的参数
int main(int argc, char ** argv)
argc是argument count (参数的数量)
argv是argument vector (参数的向量)- char, char*, char**
1 | char //字符类型 |
示例
当我们用命令行编译的时候,执行c文件的时候。./test x y z
如果我们在c文件中输出argc和argv,便会知道到argc=4,argv中分别是./test x y z
结果
argc是命令行的参数的个数argv是命令行中参数的字符串
Related Articles
2020-03-16
指针和const修饰符
前言 声明一个int类型的指针int * p 一个变量int x 随即,赋地址p = &x; 到了这里,p就是x变量的地址。*p 就是x的值。 示例 const float * p float const * p //1.2.等价 float * const p const float * const p所以,就懂了。const修饰值,就不能改变值。修饰地址,就不能改变地址。
2020-04-06
面向行fgets()和fputs()
前言该函数是面向行操作。不同于,getc()是处理字符 函数fgets() 作用把读入的内容添加到字符串中。 参数(字符串地址,字符个数,FILE指针) 返回值如果读到文件结尾(EOF),返回NULL如果还没有到EOF,返回之前传给它的字符串地址 范围 1.读取到第一个换行符后面。2.读到文件结尾3.读到字符个数-14.如果读到字符上限已经读完一行,则会把结尾的’\n’放在’\0’前面最后,在最后一个字符后面加’\0’ Don’t forget !字符串的大小是:字符个数+最后的空字符 fputs() 参数(字符串地址,FILE指针) fgets()保留了换行符,fputs()不会再添加换行符不同于puts()函数会在末尾添加换行符 strstr() 作用查找字符串中要查找的字符串 参数(被查找的字符串str1,需要的字符串str2) 返回值返回str1中str2的首位置 示例显示含有某个字符的一整行12345678910111213141516171819202122232425262728293031323334#include<stdio.h...
2020-03-16
函数中参数(地址和变量)
前言函数中使用参数是否会改变主调函数中的变量?全局变量在函数如何改变?示例函数中的全局变量12345678int x = 1;int function(){ int x; x = 2; printf("%d, x); //x = 2;}printf("%d", x); //x = 1; 在块中,重新定义了局部变量x,(因为同名)所以全局变量暂时被覆盖。当跳出块时x变为全局变量。 1234567int x = 1;int function(){ x = 2; printf("%d, x); //x = 2;}printf("%d", x); // x = 2; 因为全局变量随处可用,所以可在块中修改x的值。所以全局变量很容易被修改,一般将固定值设为全局变量,使用const修饰。 函数中的参数。一般由主调程序将变量传给函数。 例如函数 1234int function(const int arr[], int x, int ...
2020-03-19
字符串数组
了解 char *和char **和char *arr[]是指针类型。字节是8(64位操作系统)。(int *也一样)而数组 char arr[1][1]字节是1。 char *arr[]是定义了多个指针。把数组写成指针时按顺序替换。 说明 char* arr 和 char arr[x]的区别。为什么要给数组赋值,因为要给它开内存,等同于意义char arr[] = "string"而char* arr是定义指针变量。没赋地址的时候是乱指的,野指针。 所以,char* arr[]是定义了多个地址变量。char arr[x][y]是需要开辟应有的内存的。这就是scanf能直接读入char arr[x][y]而不能读入char* arr[]的原因。 示例1234567char* arr[3]; //因为 char* x; x的地址为&x//soprintf("%p %p %p\n", &arr[0], &arr[1], &arr[2]);//指针的地址//自然而然printf("%p %p %p\...
2020-03-20
字符串输入'char*和char[]'
不同点 定义char* a这个a是变量, 可以修改char b[]这个b是常量, 不能改变 内存空间 一个指针,一个数组 没有开辟空间123char* str; //没有开辟空间scanf("%s", str);//虽然可以读入,但指针是乱指的,可能会擦拭本来的程序导致崩溃printf("%s", str); 这里在C primer plus上看到,这里的参数是个未初始化的指针,str会指向任何地方。所以,有可能会scanf改写某个地址上的值,从而擦掉程序中的代码。导致程序异常结束。 开辟空间123char* st;st = "hello"; //开辟空间printf("%s", st); 字符串的几种输入 当以数据形式赋值时这种形式可以 1char str[10] = "ferry"; 这种形式不行(关键理解,数组的形式中str是常量)123char str[10];str = "ferry"; // str被看作(数组的...
2020-04-14
二进制与字符串的转换
前言二进制是一个值01010101,而字符串是一些字符后面加上’\0’,”01010101”.当我们要将这两种形式进行转换的时候,可以运用位运算符,和某两个算法解决。 字符串——>数值 先将数值变量向左移动,再用*取出字符串中的字符,-‘0’转换成数值,添加到变量中。 1234567891011int btoi(char * st){ int num = 0; while (*st)//到空字符结束,8个数,循环8次 { num = (num << 1);//左移动 num += (*st++ - '0');//从左往右取字符,并转换成数值,添加到num } return num;} 数值——>字符串 传递给函数,数值,和要准备存储的字符数组。 取最后一位数(运用8进制的掩码操作01 & num),并将其转换成字符,+ '0'添加到数组中。掩码:运用&运算符,用0覆盖掉1,0也为0 然后,将num...
