我有一个问题,希望收到您的建议。请帮我。 我正在使用指针编写一些代码。我的代码如下:
#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指针。但实际上并非如此。为什么呢?
当我执行此代码时,我得到的是: 在击败func之前:abcdef 在功能 - 分配之前:abcdef 在功能 - 分配后:123456789 在击败func:abcdef
之后请帮我弄清楚发生了什么。非常感谢你。
答案 0 :(得分:1)
这里有一些问题:
如果您希望test_pointer
能够更改调用者中t
的值,则调用方必须传递t
的地址,{{1需要做一个指针赋值。就像现在一样,test_pointer
按值传递,这意味着它被复制,被调用的函数不会影响它。
在t
中,对test_pointer
的调用没有任何意义。它分配10个字节的内存,结果存储到malloc
,然后你立即将其他东西分配给t
(字符串常量的地址),而不使用返回的内存t
。因此要么取消对malloc
的调用,要么你真的想要使用malloc
返回的内存,你可以使用malloc
将字符串复制到那个内存中(或者你可以做到只需拨打一次strcpy
)即可完成整个事情。
答案 1 :(得分:0)
因为Both(t)是局部变量而不是全局变量。 在此程序的两个函数范围内的全局变量将保留其更改值并按您的意愿打印..
在你所称的功能中,&#34; t&#34;得到一个新的内存分配,并留下以前的引用..
在Main Function中,Local Variable T指向Constant Array ..