char*argv[]是指针数组或字符字符串数组
据我目前的了解,,char*argv[]是指针数组或字符字符串数组,c,argv,C,Argv,据我目前的了解,, char*argv[]={“abc”,“def”} 初始化由2个char指针组成的数组。第一个指向“abc”,第二个指向“def”。名称argv也是指向数组argv中第一个指针的指针 为什么有人说argv是一个char字符串数组呢?(就像K&R的C编程语言一样)。它们不是指指向chars的指针数组吗?这本书也解释了这一点 如果我的假设是正确的,printf(“%s”,argv[1])中的%s根本不需要字符字符串,而是指向字符字符串的指针 谢谢你的耐心 我读过的东西: 正如C
char*argv[]={“abc”,“def”}代码>
初始化由2个char
指针组成的数组。第一个指向“abc”
,第二个指向“def”
。名称argv
也是指向数组argv
中第一个指针的指针
为什么有人说argv
是一个char
字符串数组呢?(就像K&R的C编程语言一样)。它们不是指指向char
s的指针数组吗?这本书也解释了这一点
如果我的假设是正确的,printf(“%s”,argv[1])
中的%s
根本不需要字符字符串,而是指向字符字符串的指针
谢谢你的耐心
我读过的东西:
正如C标准中所使用的,“字符串是以第一个空字符结尾并包括第一个空字符的连续字符序列”(C 2018 7.1.1)。它不是字符*
。char*
可能指向字符串的第一个字符,在C标准中有时被称为指向字符串的指针,但这是一个草率的术语,因为char*
必然是指向字符的指针指向“序列”没有技术定义虽然我们可以把它理解为指向序列的第一个元素
据我目前的理解,char*argv[]={“abc”,“def”}代码>初始化2个char
指针的数组
这是正确的
名称argv
也是指向数组argv
中第一个指针的指针
鉴于问题中的argv
定义,这是不正确的。定义char*argv[]={“abc”,“def”}
将argv
定义为char*
的数组。它不是指针
当数组用作sizeof
或一元&
的操作数时,它将作为数组进行操作。(另外,当使用字符串文字初始化数组时,字符串文字将用作数组。)除此之外,当在表达式中使用数组时,它将转换为指向其第一个元素的指针。这种转换是自动进行的,非常常见,学生可能会将数组或数组名称错误地作为转换到的指针。这是一个错误。数组不是指针
为什么有人说argv
是一个char
字符串数组呢?(就像K&R的C编程语言一样)
Kernighan和Ritchie在索引中为argv
列出的任何地方的C编程语言版本中都没有这样说。在1978年第一版中,他们在第110页说“第二(argv
)是一个指向包含参数的字符串数组的指针,每个字符串一个。”在1988年第二版中,他们在第114页说“第二(argv
,用于参数向量)是一个指向包含参数的字符串数组的指针,每个字符串一个。“索引还列出了argv
的第163页,但这里只是附带提到了一点,程序名参考了argv[0]
请注意,它们将argv
称为指针,而不是数组。这是因为main
的argv
参数是指针。尽管可以使用int main(int argc,char*argv[])
声明它,但是声明为数组的参数会自动调整为指针。因此,char*argv[]
在main
的声明中将argv
定义为与您显示的语句不同的东西,char*argv[]={“abc”,“def”}代码>。在参数声明中,它会自动调整为指针。在单独的定义中,它是一个数组
尽管Kernighan和Ritchie确实将argv
称为指针,而不是您编写的数组,但他们说它是“指向数组的指针”。这也是一个草率的术语。它的类型是指向-char
的指针,而不是指向-char
数组的指针。它是指向数组的指针,只是指它是指向char
数组的第一个元素的指针
如果我的假设是正确的,printf(“%s”,argv[1])
中的%s
根本不需要字符字符串,而是指向字符字符串的指针
根据C 2018 7.21.6.1 8,对于不带修饰符或精度的s
到printf
说明符,“参数应是指向字符类型数组初始元素的指针。数组中的字符写入(但不包括)终止空字符。”因此,应传递char*
(或有符号字符*
或无符号字符*
)指向字符串的初始字符。char**argv指向一个参数,该参数中有一个字符
例如:
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* temp.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: albarret <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/07/05 20:14:37 by albarret #+# #+# */
/* Updated: 2019/07/05 20:17:41 by albarret ### ########.fr */
/* */
/* ************************************************************************** */
#include <unistd.h>
void ft_putchar(char c)
{
write(1, &c, 1);
}
int main(int argc, char **argv)
{
int i;
i = 0;
if (argc < 2)
{
write(1, "\n", 1);
return (0);
}
while (argv[1][i])
{
ft_putchar(argv[1][i]);
i++;
}
write(1, "\n", 1);
return (0);
}
/*******************************************************************************************************/
/* */
/* ::: :::::::: */
/*温度c:+:+:+:+:*/
/* +:+ +:+ +:+ */
/*作者:albarret++:++++*/
/* +#+#+#+#+#+ +#+ */
/*创建时间:2019/07/05 20:14:37由阿尔巴雷特制作*/
/*更新:2019/07/05 20:17:41阿尔巴雷特*/
/* */
/* ******************************