不懂来虚心请教高手!!!

xiaoxiangmao 2009-12-06 01:32:43
1.以下程序的运行结果是_____
#include<stdio.h>
#include<string.h>
fun(char*s)
{ char a[7];
s=a;
strcpy(a,"look");
}
main()
{ char *p;
fun(p);
puts(p);
}
答案是不确定的值,不懂!!!


2.#include<stdio.h>
#include<string.h>
fun(char*w,int n)
{ char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}
}
main()
{ char*p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
为什么答案是1711717而我想的结果是1734517 我认为进行了一次循环以后就结束循环了!!!


3.设有以下程序段:
char str[4][10]={"first","second","third","fourth"},*strp[4];
int n;
for(n=0;n<4;n++) strp[n]=str[n];
若k为int型变量且0<=k<4,则对字符串的不正确引用是()
A)strp B)str[K] C)strp[k] D)*strp
答案是A,为什么呢???

...全文
305 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltmit 2009-12-06
  • 打赏
  • 举报
回复
首先第一个程序的错误:
子函数fun里面的char数组a是在程序栈上分配的,其生存空间是函数内部。运行出fun就释放了,造成p变成野指针。


第二个:s1和s2为两个指针,根据字符串长度,其差值应该相差7。每个循环里面一个++一个--,那么距离减少2,怎么可能一个回合就退出?

第三个:strp的类型严格说应该是char**(strp[x]的类型才是char*)。所以选A。
xiaoxiangmao 2009-12-06
  • 打赏
  • 举报
回复
谢谢大家,可是解释我不太看的懂啊!!!
breezes2008 2009-12-06
  • 打赏
  • 举报
回复
第1题类似的已经讨论过很多次了。
一切都是传值调用,fun函数接收到的是p值的一份拷贝,即s=p;
而fun函数内部中有s=a;此时表示s的值已经发生变化了!!
alarm321 2009-12-06
  • 打赏
  • 举报
回复
1.第一个因为a[7]是局部变量,当退出fun函数的时候被释放了。而且char*p没有初始化所以得到的值不同
xuecyuyan 2009-12-06
  • 打赏
  • 举报
回复
指针最好赋初值NULL
sduxiaoxiang 2009-12-06
  • 打赏
  • 举报
回复
栈空间 函数接受接释放了
starwalker 2009-12-06
  • 打赏
  • 举报
回复
3. strp是个指针数组,其指向的首地址不是字符串的所在地址
B应该也有问题,因为没有定义K(也有可能是笔误)
starwalker 2009-12-06
  • 打赏
  • 举报
回复
2. 搞清楚运算符的优先级就好办了
starwalker 2009-12-06
  • 打赏
  • 举报
回复
1. fun的参数为传值,而不是传引用,因此虽然fun将形参修改了,但是实参并没有修改。
因此p仍然是个野指针。

69,369

社区成员

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

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