标题:函数调用指针的问题????
只看楼主
小林
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-9-7
 问题点数:0 回复次数:17 
函数调用指针的问题????

/*使用函数将字符串逆序输出*/
#include<stdio.h>
#include<string.h>
void myf(char *p);
main()
{
char a[80];
gets(a);
myf(a);
printf("\n");
puts(a);
getch();
}

void myf(char *p)
{
char *q,t;
q=p+(strlen(p)-1); /*q指针指向数组的最后一个元素的地址*/
while(p<q)
{
t=*p;*p=*q;*q=t; /*首尾元素交换位置*/
p--;q++;
}
我在win-tc上运行编译可以成功,运行时就会出现一个和cpu有关的问题!!郁闷!!

搜索更多相关主题的帖子: 指针 函数 
2006-09-16 11:52
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
得分:0 
以下是引用小林在2006-9-16 11:52:50的发言:

/*使用函数将字符串逆序输出*/
#include<stdio.h>
#include<string.h>
void myf(char *p);
main()
{
char a[80];
gets(a);
myf(a);
printf("\n");
puts(a);
getch();
}

void myf(char *p)
{
char *q,t;
q=p+(strlen(p)-1); /*q指针指向数组的最后一个元素的地址*/
while(p<q)/*反了 是p>q*/
{
t=*p;*p=*q;*q=t; /*首尾元素交换位置*/
p--;q++;
}
我在win-tc上运行编译可以成功,运行时就会出现一个和cpu有关的问题!!郁闷!!

2006-09-16 13:35
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
while(p&lt;q)!!!!!!!!!!!!!!!

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-09-16 13:37
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
都不是

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-09-16 13:37
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

应该是在函数体里改动了p的地址,才有这样的情况.


倚天照海花无数,流水高山心自知。
2006-09-16 13:49
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
得分:0 

刚才一直在想我的那个程序
没仔细看 试都没试就帖出去了
不好意思

2006-09-16 13:57
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
改到没什么,象char *p=s[4];
p++;这都正常
但是不能指针相互比较大小
指针只能++ -- ==
这样的运算
* / < > 都不行
非常不稳定,好的编译器就是错误

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-09-16 15:24
小林
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-9-7
得分:0 
请指教以下,不用指针的地址比较(p<q)
,那应该怎么做???

2006-09-16 15:41
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 

照你的思路
while(p!=q||p+1!=q)
这种写法头一次啊
感觉很.....


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-09-16 15:47
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
i=0,j=strlen(p)-1;
while(i<j)
{
t=*(p+i),*(p+i)=*(p+j),*(p+j)=t;
i++,j--;
}

倚天照海花无数,流水高山心自知。
2006-09-16 16:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-90585-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.302939 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved