几道练习题

写出输出结果


1.

#include <stdio.h>
void g(int**);
int main()
{
       intline[10],i;
       int*p=line; //p是地址的地址
       for(i=0;i<10;i++)
       {
              *p=i;
              g(&p);//数组对应的值加1
       }
       for(i=0;i<10;i++)
       printf("%d\n",line[i]);
       return0;
}
 
void g(int**p)
{
       (**p)++;//值++
       (*p)++;//指针++
}

输出:

1 2 3 4 5 6 7 8 9 10


2.

#include <stdio.h>

int main()
{
	int arr[] = {6,7,8,9,10};
	int *ptr = arr;
	*(ptr++)+=123;
	printf("%d \n", *ptr);
	printf("%d %d \n", *ptr, *(++ptr));

	return 0;
}

输出:

7

8 8

过程:对于*(ptr++)+=123;先做加法6+123,然后++,指针指向7;对于printf(“ %d %d ”, *ptr, *(++ptr));从后往前执行,指针先++,指向8,然后输出8,紧接着再输出8


3.

#include <stdio.h>
void foo(int m, int n)
{
    printf("m=%d, n=%d\n", m, n);
}

int main()
{
    int b = 3;
    foo(b+=3, ++b);
    printf("b=%d\n", b);
return 0;
}

输出:m=7,n=4,b=7(VC6.0)

这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同

编译器得处理不同。也是因为C标准中对这种方式说明为未定义,所以

各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。

因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理

这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得

结果。最后是看编译器优化。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值