更改 char* 数组中元素的地址? C

标签 c arrays

首先是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void test (char* word)
{
    char y[20] = "hlajwoma";
    word = &y;
}


int main()
{
    char* words[3] = {NULL};

    test(words[1]);
    words[0] = "LOL0";
    words[1] = "LOL1";
    words[2] = "LOL2";

    printf("%s\n%s\n%s", words[0], words[1], words[2]);

    return 0;
}

所以我想在这里做的是,你可以看到我有一个称为单词的 char* 数组。该数组存储元素的内存地址。我选择要编辑的单词[1],但它不起作用。

您能给我指点方向吗?

最佳答案

一个问题是参数按值传递,基本上意味着它们被复制到函数中的局部变量中。更改副本当然不会更改原始变量,而且一旦函数返回,局部变量就会超出范围并不再存在。通常,您可以使用按引用传递来解决该问题,这在 C 中不存在,但可以用指针模拟。因此,您需要传递一个指向指针的指针作为参数,并在函数中使用解引用来更改值。

但是这让我们回到了整个“局部变量”的问题,以及它们一旦超出范围就如何不再存在。由于您想让指针指向本地数组y,因此一旦函数返回,指针将不再有效,并且使用指针将导致未定义的行为。 p>

实际的问题是您在执行分配之前调用函数进行“修改”。一旦解决了上述问题,您可能应该更改执行操作的顺序。

关于更改 char* 数组中元素的地址? C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900680/

相关文章:

javascript - Ramda,从数组中提取一个 json 索引

ruby - 当起始索引大于 (array.size -1) 时,关于 ruby​​ Array [] 方法的混淆结果

在遍历同一数组时更改数组值会导致奇怪的行为

c - 数组数据结构(和)数组数据类型如何理解差异

c - 搜索 txt 文件然后在控制台打印 txt 文件并为搜索的字符串着色

c - 在 C 中的凯撒密码中使用 argc 和 argv

c - 按钮处理(伪代码/c)

python - 如何将 32 位整数编码为字节数组?

java - 是否存在 if 语句无法被跳转表替代的情况?

arrays - 在 Excel VBA 中对二维数组进行排序