指向指针的问题

hearlihong 2004-11-10 10:01:56
void Test(char **tem)
{
char **str;
*str= (char *)malloc(sizeof(char) *100);

/*这里这样写运行时错误,提示str没有定义的变量,
将char **str改成,char **str=tem成功!
*/

GetMemory(str);
}
void main(void)
{

char *tem;
Test(&tem);

/*上面的写法正确。
char **tem;
Test(tem);
这样的写法运行时错误提示tem是没有定义的变量,为什么?
*/

}
...全文
135 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fire314159 2004-11-10
  • 打赏
  • 举报
回复
所以说p1,p2都是野指针.至于怎样为p2申请指向的空间,p1的作用就在这.即
char *p1;
char **p2;
p2=&p1;
*p2=(char *)malloc(...)等价于p1=(char *)malloc(...)
fire314159 2004-11-10
  • 打赏
  • 举报
回复
只要不是全局变量或者static局部变量,变量值都是随机的。
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
fire314159(不说废话了)
也就是说p2必须要有个初始值才能使用。
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
在.net环境中。
按fire314159(不说废话了) 的说法,
既然这样那,p2;如何分配空间呢?
p1,不时野指针,p2是野指针,是这个意思吗?
还是,p1不野,*p2不野,p2野,还是别的?
fire314159 2004-11-10
  • 打赏
  • 举报
回复
换句话说,先让p2知道自己指向哪里。即p2=address; 然后再*p2=(char *)malloc(....)
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
char *tem;
Test(&tem);
这里的解释好像有点问题,我觉得这里成功是因为,tem对象已经建立,所以,&tem是可以取到tem的地址的。

char **tem;
Test(tem);
这里也应该是一样的阿。为什么不成功呢?

如果按照你的初始化说法,哪第一个也不应该成功才对啊。因为*tem也没有被初始化

fire314159 2004-11-10
  • 打赏
  • 举报
回复
我们来简化一下问题。现在有一个指针p1指向char。有一个指向指针的指针p2。
定义如下:
char *p1;
char **p2;

楼主理所当然认为*p2是一个指向char的指针,这是正确的。但要注意!!我们必须首先找到p2指向的空间,然后再用这个空间来装动态分配的空间的地址。即:*p2=(char *)malloc(......)
但楼主注意了!你的p2还是野指针,也就是说,它都不知道自己指向哪里?更谈不上用它指向的空间来装动态分配的空间地址了。
说得非常土八路式,为了楼主好理解。
qingyuan18 2004-11-10
  • 打赏
  • 举报
回复
你这是在vc中还是tc?
在tc中变量是先定义后使用,char **tem;Test(tem);这里的tem应该在之前定义,
zhouhuahai 2004-11-10
  • 打赏
  • 举报
回复
问题2:
在你的main函数中,声明了char *tem;而之后没有对tem初始化,对tem初始化有三种方法:
1.先声明一个char 数组变量,再把此变量的地址赋给tem.如:
char x[]="temple";
char *tem;
tem=x;
2.直接初始化:
char *tem="temple";
3.用new 或malloc分配空间:
char *tem;
tem=(char *)malloc(sizeof(char)*100);

现在再来看问题1:
char **str--->str是个char型二级指针.那么在此不光str要初始化,连*str也要初始化.
因为此时str和*str都是指针.
而*str= (char *)malloc(sizeof(char) *100);中只对*str进行了初始化,但指针str并未初始化.
如改成char **str=tem;这样就对str和*str都进行了初始化.str被赋值为tem.*str被赋为*tem.
hearlihong 2004-11-10
  • 打赏
  • 举报
回复
一共两个简单问题,大家来抢分阿。
abcdefu520 2004-11-10
  • 打赏
  • 举报
回复
不说废话
内容概要:本文系统阐述了时间重分配多同步挤压变换(Time-Reassigned Multiple Synchrosqueezing Transform, TR-MSST)在旋转机械轴承故障诊断中的应用,并提供了完整的Matlab代码实现方案。该方法通过引入时间重分配策略与多同步挤压变换相结合,显著提升了传统时频分析技术在处理非平稳振动信号时的能量聚焦性与时频分辨率,能够更精确地捕捉轴承故障产生的微弱周期性冲击特征,尤其适用于强噪声干扰下的早期故障检测。文中详尽解析了TR-MSST的数学原理、算法实现流程及其关键参数设置,结合仿真与实测信号验证了其在故障特征频率提取方面的优越性能,充分体现了其在复杂工况下机械设备状态监测中的实用价值。; 适合人群:具备信号处理基础知识和Matlab编程能力,从事机械工程、设备故障诊断、状态监测与预测性维护等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于电机、风机、齿轮箱等旋转机械的早期轴承故障检测与诊断;②用于提升强噪声背景下微弱故障信号的提取能力与诊断准确性;③作为先进时频分析方法的学习范例,深入掌握同步挤压类变换的理论延伸与工程实现技巧。; 阅读建议:读者应结合提供的Matlab代码进行实践操作,通过构造仿真信号与分析实际实验数据,重点观察时频图的重构效果与故障特征频率的演化规律,从而深化对TR-MSST方法机理的理解并提升其在实际工程问题中的应用能力。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧