指针不能在C中分配?

时间:2016-01-29 08:48:44

标签: c pointers

我想创建一个字符串数组,所以我首先使用:

char** p = malloc(sizeof(char*) * count);  // count is the number of strings

但是当我想要初始化这些字符串时,麻烦来了:

for (int i = 0; i < count; i++)
{
    char* s = malloc(size_of_each_string);
    *p + i = s;  // THIS STEP INDUCES ERROR

    while (*s++ = *input++);  // initialize by copy
}

所以我真的很困惑。 * p + i似乎是指针算术,它转移到另一个指针。一般允许指针赋值(指向同一个对象)。那么为什么不允许这样的任务呢?我怎么能绕过这个来完成这个任务呢?

错误消息是:表达式不可分配。

4 个答案:

答案 0 :(得分:9)

使用*(p+i)=s代替*p+i=s

您尝试做的事情是将{s}保留在(p+i)地址中。为此,您需要使用*(p+i)代替*p+i

关于错误讯息:

这里算术表达式* p + i将导出一个值。但是您只能将值保存到内存地址中。为此,您将收到该错误消息。

答案 1 :(得分:4)

*p + i = s;

相当于

*(p) + i = s;

由于operator precedence.它产生一个rvalue,这是不可分配的。

改为使用parantheses:

*(p + i) = s;

或者,更好的是,下载:

p[i] = s;

答案 2 :(得分:2)

这是operator precedence的问题。

表达式*p + i被解析为(*p) + i而不是*(p + i),因此您需要明确地将其解析。或者使用普通数组索引语法p[i]

答案 3 :(得分:2)

为什么不通过以下方式简化代码:

char** p = malloc(sizeof(char*) * count);  // count is the number of strings

for (int i = 0; i < count; i++)
{
    p[i] = malloc(sizeof(char) * size_of_each_string));
    strcpy(p[i], input);
}