传址怎么传不过去?
void fun ( char *s ){ char a;
strcpy( a, "STRING" );
s = a;
}
main()
{ char *p="PROGRAM";
fun( p );
printf("%s\n",p);
}
指针p本来指向 “”PROGRAM“”的开头,经过fun()函数把p指针又指向了a的开头,我解释的对吗?为什么? 你不能这样的,你在函数中创建了局部变量 数组 a,然后将局部变量的地址赋值给另一个局部变量,,,你这样没用的 Krant5 发表于 2016-8-30 23:07
你不能这样的,你在函数中创建了局部变量 数组 a,然后将局部变量的地址赋值给另一个局部变量,,,你这样没 ...
那怎么改才行? 辣的果丶 发表于 2016-8-30 23:09
那怎么改才行?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun ( char **s )
{
char *a=(char *)malloc(10*sizeof(char)) ;
strcpy( a, "STRING");
*s = a;
}
main()
{ char *p="PROGRAM";
fun( &p );
printf("%s\n",p);
free(p);
} Krant5 发表于 2016-8-30 23:15
我能看懂。。但是还不明白啥意思?不知道为什么这样写 辣的果丶 发表于 2016-8-30 23:26
我能看懂。。但是还不明白啥意思?不知道为什么这样写
你想再另一个函数中改变一个产量的值,那就必须传他的地址,而这里他是指针变量,所以说他的地址的类型是char* *.而函数中创建的局部产量会在返回时释放,所以说可以用malloc进行手动分配和释放 Krant5 发表于 2016-8-30 23:32
你想再另一个函数中改变一个产量的值,那就必须传他的地址,而这里他是指针变量,所以说他的地址的类型是 ...
意思是不是说 malloc函数分配创建的不是局部变量了? Krant5 发表于 2016-8-30 23:32
你想再另一个函数中改变一个产量的值,那就必须传他的地址,而这里他是指针变量,所以说他的地址的类型是 ...
fun(p) 不是已经传递地址了吗 为什么还要用 fun(&p)地址的地址? p指向的是一个字符串常量,存在全局区,是不能被修改的,可以使用字符数组。 heblhc 发表于 2016-8-31 09:38
p指向的是一个字符串常量,存在全局区,是不能被修改的,可以使用字符数组。
不对吧,p指向的没声明在全局区呀,不应该在常量区吗 辣的果丶 发表于 2016-8-31 10:49
不对吧,p指向的没声明在全局区呀,不应该在常量区吗
其实我想说的就是这是个字符串常量,打错了 你要知道,s = a 中的 s 只是 fun 中的一个变量,更改fun 中的 s 并不会改变外面p的值 辣的果丶 发表于 2016-8-31 09:37
fun(p) 不是已经传递地址了吗 为什么还要用 fun(&p)地址的地址?
你想啥呢,P 就是一个指针变量,你传递的只是P得值 ,字符串的首地址,你要改变P 的指向,肯定要取地址&p 好厉害 指针这个部分我一直都学得不是太明白,这下学习好多
页:
[1]