更改函数中的指针地址

Changing pointer address in a function?

本文关键字:指针 地址 函数      更新时间:2023-10-16

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

#include <stdio.h>
#include <stdlib.h>
void test_pointer (char *t);
int main (){
   char *t = "abcdef";
   printf("Before excuting func: %sn", t);
   test_pointer(t);
   printf("After excuting func: %sn", t);
   return 0;
}
void test_pointer (char *t) {
   printf("In function - before allocating: %sn",t);
   t =(char *) malloc(10);
   t = "123456789";
   printf("In function - after allocating: %sn",t);
}

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

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

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

这里有几个问题:

  1. 如果希望test_pointer能够更改调用方中t的值,则调用方必须传递 t 的地址,并且test_pointer需要执行指针分配。 就像现在一样,t是按值传递的,这意味着它被复制并且被调用的函数不会影响它。

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

因为两者都是局部变量而不是全局变量。在此程序的两个函数中,全局变量将保留其不断变化的值并根据需要打印。

在你调用的功能中,"t"获得一个新的内存分配并离开以前的引用。

在主函数中,局部变量T指向常量数组。