`
dcj3sjt126com
  • 浏览: 1823036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C语言学习六指针的经典程序,互换两个数字

    博客分类:
  • C
c 
阅读更多

示例程序,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语言入门经典(第4版)--源代码及课后练习答案

    本书集综合性、实用性为一体,是学习C语言的优秀入门教材,在世界范围内广受欢迎,口碑极佳。书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握的必要知识,并提供了大量的实用性很强的编程...

    你必须知道的495个C语言问题

    6.4 既然它们这么不同,那为什么作为函数形参的数组和指针声明可以互换呢? 数组不能被赋值 6.5 为什么不能这样向数组赋值?externchar*getpass();charstr[10];str=getpass("Enterpassword:"); 6.6 既然不能向...

    《你必须知道的495个C语言问题》

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...

    第8章 指针-2指针变量作函数参数 - 典型实例 - 两数交换new1

    第8章 指针——指针变量做函数参数:典型实例C语言程序设计第8章 指针{}{}{}{}实参形参一个典型实例——两数互换程序 1:基本类型变量作函数参数程序 2:

    c语言经典案例

    本文件中讲述了c语言经典的282个案例,由浅入深。有利于提高广大爱好c语言编程的人员。 其中包括: 第1章 初识C语言 1 实例001 第一个C语言程序 2 实例002 一个完整的C语言程序 2 实例003 输出名言 3 实例004 用TC ...

    你必须知道的495个C语言问题.pdf

    作者在网络版CFAQ列表的基础上进行了大幅度的扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到的495个C语言问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等...

    你必须知道的495个C语言问题(PDF)

    3.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一 个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...

    C语言FAQ 常见问题列表

    难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...

    明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

    《明解C语言 第3版 入门篇》是日本的C语言经典教材,自出版以来不断重印、修订,被誉为“C语言圣经”。 《明解C语言 第3版 入门篇》图文并茂,示例丰富,第3版从190段代码和164幅图表增加到205段代码和220幅图表,对...

    C程序范例宝典(基础代码详解)

     本书既可作为C程序的初学者学习用书,也可作为程序开发人员、相关培训机构老师和学生的参考用书。 第1章 基础知识 1 1.1 进制转换 2 实例001 十进制转换为十六进制 2 实例002 十进制转换为二进制 3 实例...

    c程序设计习题参考(谭浩强三版)习题参考解答

    9.1定义一个代参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 66 9.2输入两个整数,求它们相除的余数。用带参的宏来实现,编程序。 67 9.3 67 9.4给年份year定义...

    C语言shuoming.chm

    下面这个程序使用了关于窗口大小的定义、颜色的设置等函数, 在一个屏幕 上不同位置定义了7个窗口, 其背景色分别使用了7种不同的颜色。 例1.: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; main() { int i; ...

    C与C++笔试面试常考终极秘籍

    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; ...

    python交换两个变量的值方法

    大部分语言,例如c语言,交换两个变量的值需要使用中间变量。 例如交换a,b 伪代码: tmp = a a = b b = tmp python里面可以实现无临时变量的交换 (a,b) = (b,a) 对于它的交换原理我深感好奇,因为这意味着python...

Global site tag (gtag.js) - Google Analytics