C语言二级第12套

1.

#include<stdio.h>
int k=7,m=5;
void f(int **s)
{
 int *t=&k; t是一个变量,它的值是k的地址,*t就是k
s=&t; s是一个变量,它的值是t的地址,*s就是t
*s=&m; *s就是t,也就是把m的地址的值赋给t,那么t的值就变成了m的地址
printf("%d,%d,%d,",k,*t,**s);结果是7,5,5
}
main()
{ int i=3,*p=&i,**r=&p;
f(r);r的值传递给s,r和s是分别的2个变量,*r=*s=p,
但是f里面重新修改了s,那么变成了*s=t,没有改动过p,因此r没有变,p也没有变。
 
面对指针操作的时候,先撇开其类型上的区别,比如上边的s和t,
他们本质都是一个变量,然后记录了一个值,你只需要记录当s=&t时,*s就是t
然后一步步推理,就能分析清楚所有的指针操作,久而久之,熟能生巧。
 
至于类型上,记住一个关系:s=&t,那么s就该比t多一个*号
如t是int *t,那么s就是int **s

2.

#include<stdio.h>
main()
{
char a[20],b[]="The sky is blue.";
int i;
for(i=0;i<10;i++)
scanf("%c",&a[i]);
a[i]=*\0*;
gets(b);
printf("%s%s\n",a,b);
}

输入:Fig flower is red. <回车>

解:首先a是读取前10个字符 因此到flower结束
gets函数是读取到换行符位置,并且在换行符的位置用null(即\0)来代替,以此作为字符串结束的标志。所以实际b中的字符串应为:" is red\0is blue",输出的时候遇到了\0输出结束,因此只会输出前半部分。

结果为:Fig flower is red.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值