哪位大侠能给去我指点下这个程序为什么不能改变main函数中的值。
发布网友
发布时间:2024-10-22 04:15
我来回答
共4个回答
热心网友
时间:2024-10-22 05:00
这是一个 函数 值传递 和地址传递的问题
你传递一个指针 是一个值复制 的过程 就是说传递的是一个char*p的复制的值
所以 并没有 改变这个指针的真正的值
首先楼主 你的程序需要改一下 改成这样就好了可以运行 但是是错的
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void get_str(char*p)
{
p=(char *)calloc(4,sizeof(char));//返回一个char型的指针
strcpy(p,"abcd");
}
int main()
{
char *p=NULL;
get_str(p); printf("p=%p\n",p);
return 0;
}
下面这个可以修改指针的地址
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void get_str(char**p) //传进一个指针的地址 改变指针地址 这是地址传递
{
*p=(char *)calloc(4,sizeof(char));//返回一个char型的指针
strcpy(*p,"abcd");
}
int main()
{
char *p=NULL;
get_str(&p);
printf("p=%p\n",p);
return 0;
}
热心网友
时间:2024-10-22 04:53
你这是一个内存泄漏的程序=。=
回去看看你的教材,你在调用函数中改变了指针的值,这个对形参的改变是不会对实参有影响的,就是这样
简单说来:main中的p被传递到get_str中时,传递的是p的值null
热心网友
时间:2024-10-22 05:01
你这是一个内存泄漏的程序 你要是为了不丢 就用二级指针
简单说来:main中的p被传递到get_str中时,传递的是p的值null
《《你必须知道的495个C语言问题》》 这本书建议你看下
热心网友
时间:2024-10-22 04:53
get_str并不能传递动态内存,main函数中的p一直都是NULL