在C语言中将char数组作为参数传递会变成一个指针

时间:2018-07-07 17:47:57

标签: c function pointers char arguments

我正在尝试将char数组传递给C中的函数。

我的代码如下

void Process(const char expect[])
{
    char c0 = expect[0];
    char c1 = expect[1];
}

Process("OK");

但是我的调试器告诉我,期望是指向单个字符的指针,这对我没有任何意义。如果我尝试从期望中读取数据(c0和c1变量在做什么),我会得到这个(或具有某种效果的东西)

c0 = "O";
c1 = NULL; 

令我进一步困惑的是,我使用相同的语法对参数进行了相似的功能,而没有任何问题。任何帮助将不胜感激-预先感谢。

2 个答案:

答案 0 :(得分:1)

简单的答案就是C的工作方式:指针是指向单个项目的指针,并且该指针可以递增以指向下一个项目,依此类推。

此外,数组总是作为指向其第一项的指针传递。尽管它们确实在创建时为它们分配了内存,但是从那时起,它们基本上只是适当类型的指针。

对C中的文本字符串进行特殊处理:每个可见符号在有效的char数组中均显示为char,而零表示字符串的结尾。

答案 1 :(得分:1)

数组传递很简单。数组不会传递-它们的最内层维度会衰减为指针,并且void Process(char expect[])完全等同于void Process(char *expect)

(不完整的)示例中的任何内容都表明它不起作用。

#include <stdio.h>
void Process(char expect[])
{
    char c0 = expect[0];
    char c1 = expect[1];
    printf("'%c' '%c'\n", c0, c1);
}
int main(void) { Process("OK"); }

必须打印'O' 'K'。如果它不在您程序的上下文中,则您必须做错了什么,或者程序中的某些内容未定义。