代码之家  ›  专栏  ›  技术社区  ›  psihodelia

C-“char var[]”和“char*var”之间的差异?

  •  15
  • psihodelia  · 技术社区  · 15 年前

    我期望以下两个向量在RAM中具有相同的表示:

    char a_var[] = "XXX\x00";
    char *p_var  = "XXX";
    

    但奇怪的是,对一个类型的库函数的调用 f(char argument[]) 如果我使用 f(p_var) . 但使用 f(a_var) 可以!

    为什么?

    4 回复  |  直到 13 年前
        1
  •  27
  •   anon    15 年前

    第一个创建一个包含字符串的字符数组。可以修改数组的内容。第二个创建一个指向字符串文字的字符指针。不能修改字符串文本。

        2
  •  1
  •   Steve Jessop    15 年前

    估计,函数 f 修改传递给它的字符串的内容。

        3
  •  1
  •   Petruza    13 年前

    正如其他人所说的, char *p_var = "XXX"; 创建指向无法更改的字符串文本的指针,因此编译器实现可以自由地重用文本,例如:

    char *p_var  = "XXX";
    char *other  = "XXX";
    

    编译器可以通过在内存中只存储一次“xxx”并使两个指针指向它来优化这一点,修改它们的值可能会导致意外的行为,因此您不应该尝试修改它们的内容。

        4
  •  0
  •   nikifor    15 年前

    数组(通常)可以被视为指针,但这并不意味着它们总是可以互换的。正如另一个所说,您的p_var指向一个文本,一个不能更改的静态文本。它可以指向其他内容(例如p_var=&a_var[0]),但不能更改由引号指定的原始值….

    类似的问题是,将变量定义为一个文件中的数组,然后extern将其用作指针。

    当做