Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
char*argv[]是指针数组或字符字符串数组_C_Argv - Fatal编程技术网

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阿尔巴雷特*/
/*                                                                            */
/* ******************************