C语言中指针和数组的问题(一个小地方,很简单)

来源:百度知道 编辑:UC知道 时间:2024/06/09 22:12:01
#include <stdio.h>
#include <string.h>
#define N 100
void fun(char *s);
void main()
{
char a[N];
printf("请输入字符串:\n");
gets(a);
printf("逆置前的字符串是:");
puts(a);
fun(a);
printf("逆置后的字符串是:");
puts(a);
}
void fun(char *s)
{
int i,t,n=strlen(s);
for(i=0;i<n/2;i++)
{
t=*(s+i);
*(s+i)=*(s+n-1-i);
*(s+n-1-i)=t;
}
}

为什么在void fun(char *s)函数中要定义变量t为整型,而不能定义为字符型(当定义t为字符型时报错,定义为整型时程序正确)?而*s,即a[N]不是在main函数中定义为字符型吗?
#include <stdio.h>
#include <string.h>
#define N 100
void fun(char *s);
char t;
void main()
{
char a[N];
printf("请输入字符串:\n");
gets(a);
printf("逆置前的字符串是:");
puts(a);
fun(a);
printf("逆置后的字符串是:");
puts(a);
}
void fun(char *s)
{
int i,n=strlen(s);<

我估计有可能你的问题在于:
把char t定义在了for循环里面,而不是开始就声明。
vc里面,如果写c文件而不是cpp
函数里面所有的变量都要在开头声明好。

如果仅仅是定义char型,我试过了,没问题。

补充答复:
楼主:我把示例给你看:
void testfun(char *s)
{
//定义变量
int i;
char t;
int n=strlen(s);
//在开始所有语句之前把变量声明好。
for(i=0;i<n/2;i++)
{
t=*(s+i);
*(s+i)=*(s+n-1-i);
*(s+n-1-i)=t;
}
}
只要在子函数里,在前面声明好就OK。
记住是在使用其他任何语句之前先声明好变量。

如果要追究原因,那就是编译器的问题。

vc编译c文件确实存在这个问题,
如果是linux下的cc就不存在这个问题。
如果是vc编译cpp也不存在这个问题。

如果要再深究,vc为什么编译c会存在这个问题,那就要问做vc的人了,或者其他高手请帮忙解答。我也不明白了。

字符型和整型可以互换的

t=*(s+i);
*(s+i)=*(s+n-1-i);
*(s+n-1-i)=t;
t是对其他几个指针地址(说白了就是相当于对数组下标处理,所以他必需是整形)。所以当然必须定义成为整形。如果是字符的话,就会出错。
请注意*s是地址指针。而不表示里面的字符

在vc6.0里定义成char 和int都编译通过。。。
你用的是什么编译器呢?
t为char保存的是字符。。。为int保存的是相应字符的ASCII码。。。。