示例程序,swap_1和swap_2都是错误的,推理从1开始推到2,2没完成,推到3就完成了
# include <stdio.h> void swap_1(int, int); void swap_2(int *, int *); void swap_3(int *, int *); int main(void) { int a = 3; int b = 5; //swap_1(a, b); //这是错误的 //swap_2(&a, &b); // swap_2(*p, *q); 是错误的 swap_2(a, b); 也是错误的 swap_3(&a, &b); //OK printf("a = %d, b = %d\n", a, b); return 0; } //不能完成互换功能 void swap_1(int a, int b) //没有接收主函数的变量地址,这个a和b和主函数的a,b不是一个值,所以这里无论怎么改变,主函数都不变 { int t; t = a; a = b; b = t; return; } //虽然p接收了a的地址,q接收了b的地址,但是很可惜,你改变的是p和q的值,没有修改*p和*q的值,还是无法修改主函数的值 void swap_2(int * p, int * q) //这里的参数接受的变量是p和q,int * 表示接受参数的类型,也就是说应该接受地址 { int * t; //如果要互换p和q的值,则t必须是int *, 不能是int, 否则会出错 t = p; p = q; q = t; } //可以完成互换功能,改变了两个值,改变了a和b的值 void swap_3(int *p, int *q) { int t; //如果要互换*p和*q的值, 则t必须定义成int, 不能定义成int *, 否则语法出错 t = *p; // p是int *, *p 是int, *p是代表以p为地址代表的那个内容 *p = *q; // *p 刚好是a, *q刚好是b *q = t; }
相关推荐
本书集综合性、实用性为一体,是学习C语言的优秀入门教材,在世界范围内广受欢迎,口碑极佳。书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握的必要知识,并提供了大量的实用性很强的编程...
6.4 既然它们这么不同,那为什么作为函数形参的数组和指针声明可以互换呢? 数组不能被赋值 6.5 为什么不能这样向数组赋值?externchar*getpass();charstr[10];str=getpass("Enterpassword:"); 6.6 既然不能向...
书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
第8章 指针——指针变量做函数参数:典型实例C语言程序设计第8章 指针{}{}{}{}实参形参一个典型实例——两数互换程序 1:基本类型变量作函数参数程序 2:
本文件中讲述了c语言经典的282个案例,由浅入深。有利于提高广大爱好c语言编程的人员。 其中包括: 第1章 初识C语言 1 实例001 第一个C语言程序 2 实例002 一个完整的C语言程序 2 实例003 输出名言 3 实例004 用TC ...
作者在网络版CFAQ列表的基础上进行了大幅度的扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到的495个C语言问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等...
3.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一 个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...
难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...
《明解C语言 第3版 入门篇》是日本的C语言经典教材,自出版以来不断重印、修订,被誉为“C语言圣经”。 《明解C语言 第3版 入门篇》图文并茂,示例丰富,第3版从190段代码和164幅图表增加到205段代码和220幅图表,对...
本书既可作为C程序的初学者学习用书,也可作为程序开发人员、相关培训机构老师和学生的参考用书。 第1章 基础知识 1 1.1 进制转换 2 实例001 十进制转换为十六进制 2 实例002 十进制转换为二进制 3 实例...
9.1定义一个代参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 66 9.2输入两个整数,求它们相除的余数。用带参的宏来实现,编程序。 67 9.3 67 9.4给年份year定义...
下面这个程序使用了关于窗口大小的定义、颜色的设置等函数, 在一个屏幕 上不同位置定义了7个窗口, 其背景色分别使用了7种不同的颜色。 例1.: #include <stdio.h> #include <conio.h> main() { int i; ...
1.交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3; 答案:有两种解法, 一种用算术算法, 一种用^(异或) a = a + b; b = a - b; a = a - b; or a = a^b; b = a^b; a = a^b; or a ^= b ^= a; ...
大部分语言,例如c语言,交换两个变量的值需要使用中间变量。 例如交换a,b 伪代码: tmp = a a = b b = tmp python里面可以实现无临时变量的交换 (a,b) = (b,a) 对于它的交换原理我深感好奇,因为这意味着python...