更改函数中的指针地址
Changing pointer address in a function?
我有一个问题,想听听你的建议。请帮助我。我正在使用指针编写一些代码。我的代码在下面:
#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
请帮我弄清楚发生了什么。谢谢。
这里有几个问题:
-
如果希望
test_pointer
能够更改调用方中t
的值,则调用方必须传递t
的地址,并且test_pointer
需要执行指针分配。 就像现在一样,t
是按值传递的,这意味着它被复制并且被调用的函数不会影响它。 -
在
test_pointer
,呼召malloc
没有任何意义。 它分配 10 字节的内存,结果被存储到t
,然后您立即将其他内容分配给t
(字符串常量的地址),而无需使用malloc
返回的内存。 所以要么消除对malloc
的调用,要么如果你真的想使用malloc
返回的内存,你可以使用strcpy
将字符串复制到该内存中(或者你可以通过一次调用strdup
来完成整个事情)。
因为两者都是局部变量而不是全局变量。在此程序的两个函数中,全局变量将保留其不断变化的值并根据需要打印。
在你调用的功能中,"t"获得一个新的内存分配并离开以前的引用。
在主函数中,局部变量T指向常量数组。
相关文章:
- CUDA:统一内存和指针地址的更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 向指针地址添加 20 个字节偏移量
- 如何理解智能指针的底层指针地址?
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 返回数组中值的指针地址
- C++向指针地址添加 4 个字节
- 指针地址的内存偶尔更改了函数前和后返回
- 如何根据指针地址获取指针内容
- C++ 将指针地址传递给函数
- 直接从指针/地址访问数组的元素
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何保存指针地址,以便另一个指针可以继续处理它
- 间接寻址运算符如何返回带有运算符重载的指针地址
- 使用已删除的指针地址.据我所知,
- 如何保护类外用户可以修改的指针地址?C++
- 多个调用构造函数将更改C 中的成员指针地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- Visual Studio C 2K15-在指针地址上获取错误
- 指针地址和参考混乱