c++ - 更改函数中的指针地址?

标签 c++ c pointers

<分区>

我有一个问题,想听听您的建议。请帮我。 我正在使用指针编写一些代码。我的代码如下:

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

void test_pointer (char *t);

int main (){

   char *t = "abcdef";
   printf("Before excuting func: %s\n", t);
   test_pointer(t);
   printf("After excuting func: %s\n", t);
   return 0;
}
void test_pointer (char *t) {
   printf("In function - before allocating: %s\n",t);
   t =(char *) malloc(10);
   t = "123456789";
   printf("In function - after allocating: %s\n",t);
}

在这个 main() 中,我声明了一个 char 指针并让它指向一个字符串“abcdf”(长度为 7)。 但是在 test_pointer() 函数中,我使用 malloc() 为该 char 指针分配一个新的内存分区,然后分配一个新值。这意味着使用此函数后必须更新 char 指针。但实际上并非如此。为什么?

当我执行这段代码时,我得到的是: 执行函数前:abcdef 在函数中 - 分配之前:abcdef 在函数中 - 分配后:123456789 执行完func: abcdef

请帮我弄清楚发生了什么。非常感谢。

最佳答案

这里有几个问题:

  1. 如果你希望test_pointer能够在调用者中改变t的值,那么调用者必须传递t的地址,而test_pointer需要做指针赋值。现在,t 是按值传递的,这意味着它被复制并且被调用的函数不能影响它。

  2. test_pointer 中,对 malloc 的调用没有任何作用。它分配 10 个字节的内存,结果存储到 t,然后您立即将其他内容分配给 t(字符串常量的地址),而无需曾经使用过 malloc 返回的内存。所以要么取消对malloc的调用,要么你真的想使用malloc返回的内存,可以使用strcpy复制字符串到那个内存(或者你可以通过一次调用 strdup 来完成整个事情)。

关于c++ - 更改函数中的指针地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36097498/

相关文章:

c - 使用指向 char 数组的指针获取要使用 strstr() 复制的字符串的长度

c++ - 关闭缩进 Eclipse C/C++

c++ - 使用 C++ 查找文件中的所有重复模式

c++ - 为什么这个结构数组上的代码有效?

c - 如何修复 Deque 实现

c - c语言中的 "pointer to a pointer"是什么?

c++ - 使用指针循环遍历数组

c++ - 从 int 到 vector 的隐式转换?

c++ - 如何使用 clang 获取单个 cpp 文件的 AST?

c - 当我运行这个程序时结构崩溃