我写的一个程序,虽然可以运行,但是朋友说不规范,请各位帮忙看看!!!
以下是我写的一个搜索链表里面值的程序:
#include <stdio.h>
struct a
{
int zhi;
struct a *next;
};
int main (void)
{
int a = 0, xy = 0;
struct a n1, n2, n3;
struct a *kaishi = &n1;
struct a *hanshu (struct a *kai, int shuru);
n1.zhi = 100;
n1.next = &n2;
n2.zhi = 200;
n2.next = &n3;
n3.zhi = 300;
n3.next = (struct a *) 0;
printf ("请输入您要搜索的值:");
scanf ("%i",&a);
xy = hanshu (kaishi,a);
if (xy == 0)
{
printf ("没有找到您所输入的值!\n");
}
else
{
printf ("您要搜索的值为:%i\n",xy);
}
return 0;
}
hanshu (struct a *kai, int shuru)
{
while (kai != (struct a *)0)
{
if (kai->zhi == shuru)
{
return kai->zhi;
}
else
{
kai = kai->next;
}
}
return 0;
}
问题:
我在程序里面是用一个int类型的变量XY来接受函数hanshu返回的值。
int a = 0, xy = 0;
xy = hanshu (kaishi,a);
虽然程序可以正常运行,但是我朋友说,因为函数返回的是一个指针return kai->zhi
所以要用一个指针来接受这个函数的值。
请问??是我对,还是我朋友对?为什么??
偶对这一部分还不是很清楚,请大虾为我解释,解释,谢谢。
问题点数:50、回复次数:27Top
1 楼lann64(昆仑大鹏@迦楼罗)回复于 2006-11-07 10:14:16 得分 10
因为函数返回的是一个指针return kai->zhi
函数返回的是一个int,不是指针。
不过hanshu (struct a *kai, int shuru)定义前面的int返回类型说明应该写上。
Top
2 楼lann64(昆仑大鹏@迦楼罗)回复于 2006-11-07 10:15:24 得分 0
你朋友说的是错的。Top
3 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 10:17:45 得分 0
就是说函数返回的是一个值???
但是明明是
return kai->zhi
kai->zhi明明是一个指针啊!!!Top
4 楼goodluckyxl(被人遗忘的狗)回复于 2006-11-07 10:18:13 得分 14
是你朋友对
首先程序要保证逻辑清楚
返回地址对应使用地址存储,而不应该使用非地址变量存储
其次int类型是非标准类型随着平台不通而不同
地址是固定的,平台固定地址也就定了,32位地址总线的一般采用32位的地址
一旦使用某些编译器夏的int为16或者更小,那你如何保证正确Top
5 楼huangyangman(庸人自扰)回复于 2006-11-07 10:20:26 得分 0
return kai->zhi
返回一个int 哪有指针?Top
6 楼jixingzhong(瞌睡虫·星辰)回复于 2006-11-07 10:21:11 得分 0
你的程序是对的Top
7 楼jixingzhong(瞌睡虫·星辰)回复于 2006-11-07 10:23:16 得分 20
struct a
{
int zhi;
struct a *next;
};
return kai->zhi
返回 int 类型, 不是指针 ...
不过,
规范问题倒是有一点:
hanshu (struct a *kai, int shuru) {...}
==》
int hanshu (struct a *kai, int shuru) {...}
函数返回 默认 int 是旧标准采用的行为,
但是这样可能导致问题, 因为 C99 不支持这个属性了 ...Top
8 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 10:59:06 得分 0
各位这样说我就有点了解了。
那能不能请各位帮我写出一个正确的,符合规范的呢?? 谢谢Top
9 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 11:02:51 得分 0
等等…………
我觉得把函数声明为int hanshu (struct a *kai, int shuru)这样就应该没有规范上的问题了吧,因为函数返回的是一个int型值,所以可以用int型的变量xy接受。
这样理解是可以的吧。Top
10 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 11:03:59 得分 0
但是我朋友说,我这样做,是格式的强制转换………………搞的我有点糊涂了。明明逻辑上是对的啊,为什么说是格式强制转化的???Top
11 楼goodluckyxl(被人遗忘的狗)回复于 2006-11-07 11:05:35 得分 0
你朋友把你的返回的int看成了返回地址了
Top
12 楼huangyangman(庸人自扰)回复于 2006-11-07 11:12:16 得分 0
因为你朋友错了Top
13 楼aminconi(完美缺陷)回复于 2006-11-07 11:23:47 得分 1
struct a{}和int a = 0不规范Top
14 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 11:26:28 得分 0
int a = 0不规范,我是知道了,写程序时候疏忽了。
但是struct a{}为什么不规范!!!Top
15 楼creamymami(尤文图斯)回复于 2006-11-07 11:31:51 得分 2
最大的不规范就是标识符全是拼音!Top
16 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 11:32:54 得分 0
因为我喜欢人性化!!!Top
17 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 11:33:30 得分 0
struct a{}为什么不规范!!!
把这个问题解决了,我就给分了,拜托了各位大虾。Top
18 楼huangyangman(庸人自扰)回复于 2006-11-07 11:34:59 得分 1
何为规范?谁先给我讲讲 谢谢Top
19 楼creamymami(尤文图斯)回复于 2006-11-07 11:36:28 得分 1
声明和定义都应该是int hanshu (struct a *kai, int shuru)Top
20 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 11:37:55 得分 0
creamymami(尤文图斯)
注意看帖子!!!
我觉得把函数声明为int hanshu (struct a *kai, int shuru)这样就应该没有规范上的问题了吧,因为函数返回的是一个int型值,所以可以用int型的变量xy接受。
这样理解是可以的吧。Top
21 楼oicqliuyong(上帝是狗创造的)回复于 2006-11-07 11:38:04 得分 0
算了,我给分了!!!Top
22 楼huangyangman(庸人自扰)回复于 2006-11-07 11:38:15 得分 1
creamymami(尤文图斯)
最大的不规范就是标识符全是拼音!
-------------------------
LZ确以"因为我喜欢人性化!!!"就给推脱掉了,
真搞不懂你还在那高喊如何规范的初衷!Top
23 楼qxbnit(蓝灵)回复于 2006-11-07 12:22:17 得分 0
------------------
oicqliuyong(上帝是狗创造的)
VS
goodluckyxl(被人遗忘的狗)
------------------
两个人的名字蛮有趣的
Top
24 楼shisan107(拾叁)回复于 2006-11-07 13:16:57 得分 0
------------------
oicqliuyong(上帝是狗创造的)
VS
goodluckyxl(被人遗忘的狗)
------------------
两个人的名字蛮有趣的
========================
赞!Top
25 楼BKgHost(黑色幽灵)回复于 2006-11-07 13:30:11 得分 0
你这个东西干什么用?郁闷,很多人喜欢拿规范不规范来糊弄人,其实他自己也很不规范,毕竟写程序每个人都有自己的特点,不过你要把注释都写上就肯定很规范啦~Top
26 楼sujuan243()回复于 2006-11-07 14:16:09 得分 0
那个(struct a*)0 是甚么意思我不明白Top
27 楼bohlee(我心澎湃)回复于 2006-11-07 15:23:46 得分 0
???Top




