鱼C论坛

 找回密码
 立即注册
查看: 1931|回复: 14

传址怎么传不过去?

[复制链接]
发表于 2016-8-30 23:05:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void fun ( char *s )
{ char a[10];
strcpy( a, "STRING" );
s = a;
}
main()
{ char *p="PROGRAM";
fun( p );
printf("%s\n",p);
}

指针p本来指向 “”PROGRAM“”的开头,经过fun()函数把p指针又指向了a的开头,我解释的对吗?为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-30 23:07:31 | 显示全部楼层
你不能这样的,你在函数中创建了局部变量 数组 a,然后将局部变量的地址赋值给另一个局部变量,,,你这样没用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-30 23:09:18 | 显示全部楼层
Krant5 发表于 2016-8-30 23:07
你不能这样的,你在函数中创建了局部变量 数组 a,然后将局部变量的地址赋值给另一个局部变量,,,你这样没 ...

那怎么改才行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-30 23:15:40 | 显示全部楼层

#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);
}
830.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-30 23:26:56 | 显示全部楼层

我能看懂。。但是还不明白啥意思?不知道为什么这样写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-30 23:32:05 From FishC Mobile | 显示全部楼层
辣的果丶 发表于 2016-8-30 23:26
我能看懂。。但是还不明白啥意思?不知道为什么这样写

你想再另一个函数中改变一个产量的值,那就必须传他的地址,而这里他是指针变量,所以说他的地址的类型是char* *.而函数中创建的局部产量会在返回时释放,所以说可以用malloc进行手动分配和释放
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-31 09:28:37 | 显示全部楼层
Krant5 发表于 2016-8-30 23:32
你想再另一个函数中改变一个产量的值,那就必须传他的地址,而这里他是指针变量,所以说他的地址的类型是 ...

意思是不是说 malloc函数分配创建的不是局部变量了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-31 09:37:54 | 显示全部楼层
Krant5 发表于 2016-8-30 23:32
你想再另一个函数中改变一个产量的值,那就必须传他的地址,而这里他是指针变量,所以说他的地址的类型是 ...

fun(p) 不是已经传递地址了吗 为什么还要用 fun(&p)地址的地址?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-31 09:38:11 | 显示全部楼层
p指向的是一个字符串常量,存在全局区,是不能被修改的,可以使用字符数组。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-31 10:49:45 | 显示全部楼层
heblhc 发表于 2016-8-31 09:38
p指向的是一个字符串常量,存在全局区,是不能被修改的,可以使用字符数组。

不对吧,p指向的没声明在全局区呀,不应该在常量区吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-31 14:01:38 | 显示全部楼层
辣的果丶 发表于 2016-8-31 10:49
不对吧,p指向的没声明在全局区呀,不应该在常量区吗

其实我想说的就是这是个字符串常量,打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-31 18:29:28 | 显示全部楼层
你要知道,s = a 中的 s 只是 fun 中的一个变量,更改fun 中的 s 并不会改变外面p的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-31 22:09:39 | 显示全部楼层
辣的果丶 发表于 2016-8-31 09:37
fun(p) 不是已经传递地址了吗 为什么还要用 fun(&p)地址的地址?

你想啥呢,P 就是一个指针变量,你传递的只是P得值 ,字符串的首地址,你要改变P 的指向,肯定要取地址&p
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 09:59:54 | 显示全部楼层
好厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 10:00:35 | 显示全部楼层
指针这个部分我一直都学得不是太明白,这下学习好多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 08:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表