C语言学习笔记_浅谈对c语言中argc和*argv[] 、**argv的理解。

1.指针和数组

在c语言中,数组的名称即数组首元素的地址,例如char a[],声明的是一个数组,数组名a即这个数组首元素的地址。
相对应的char* a声明的是一个char类型的指针变量,变量名为a,a存储的也是一个地址。他们是不是很相似?
例如,在下面这个代码块里,输出的str和取得的str[0]的地址是一样的,表明数组名存储的就是数组首元素地址。

 char str[120];

    printf("请输入你的英文名:");
    scanf("%s0",str);

    printf("str的地址是:%p\n",str);
    printf("str的地址是:%p\n",&str[0]);

2.argc和argv

在linux下编写的c语言程序里,我们常常会见到argc和argv,他们是什么呢?
原来argc是argument count,argv是argument value,分别是参数个数和参数值。
通常传入的时候的方式是int main(int argc,char* argv[])或int main(int argc,char** argv)。
那他们有啥区别呢?
对于char* argv[],它声明的是一个指针类型的数组,也就是声明了一个数组,数组的元素是一个个类型为char*的变量(字符串)。
对于char argv,声明的是一个指针,argv指向了char 类型的指针,或者说是字符串变量。
当char
argv[]作为函数的形参时,数组会自动退化成指针。也就是说在这里*argv[]=**argv,也就是可以理解为没啥区别。

总而言之,不管是char*argv[] 还是char **argv,这里的变量名argv就是用来一个指针,指向字符串变量的首地址。
我们可以用下标"argv[x]"的方式索引。
例如以下代码:
在linux中运行./test.c Nankee时,
它会返回:
这是test1
Nankee
因为Nankee是传入的第二个参数,可以用argv[1]索引。

//test.c
#include<stdio.h>

/*输入: ./test1.c Nanke
*/
int main(int argc,char **argv){
	if(argc != 2)
	{
	printf("请输入诸如\"%s char[]\"的命令行\n",argv[0]);
	return -1;
	}
	else
	{
	printf("这是test1\n");
	printf("%s\n",argv[1]);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值