关闭

C语言指针应用--互换两个数&冒泡排序

标签: c语言指针
1087人阅读 评论(0) 收藏 举报

交换两个数,这在C语言中是个很简单的问题,比如我们在谭浩强的那本C语言教材里,可以看到

void swap(int a, int b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

原理就是借助一个中间值存储第一个值,然后进行数值互换,但是这个程序存在一个问题,因为这个swap函数的两个参数进行的是值传递,如果在另外一个函数里去调用这个函数,会出现无法将两个数互换的结果,比如下面这段程序

int main(int argc, char *argv[]) {

	int numb1 = 3, numb2 = 6;
	swap(numb1,  numb2);
	printf("%d, %d", numb1,  numb2);
}
输出的结果是3,6,而不是想象中的交换后的6,3,那么正确的写法应该是怎样的呢?指针能够解决这个问题

void swap(int *a, int *b)
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
然后在需要调用的地方
swap(&numb1,  &numb2);

注意,函数的参数用了&取地址符号,也就是传递的是两个数的地址,在swap函数里就直接对numb1和2进行操作了,于是可以顺利实现两个数字的互换。由于在冒泡法排序里要用到两个数字互换的程序,所以这里记录下利用指针写的冒泡法排序的程序。

void sort(int *data, int dataLengh, int direction)
{
	int i, j;
	for(i=dataLengh-1; i>0; i--)
	{
		for(j=0; j<i; j++)
		{
			if(direction == 0)//from small to large numbers
			{
				if(*(data+j) > *(data+j+1))
				{
					swap((data+j), (data+j+1));
				}
			}
			else//fron large to small numbers
			{
				if(*(data+j) < *(data+j+1))
				{
					swap((data+j), (data+j+1));
				}
			}
		}
	}
}
在调用sort函数时,按照如下下发就可以了
int shuzu[] = {10,2,30,10,2,30};
sort(shuzu, sizeof(shuzu)/sizeof(shuzu[0]), 0);
这里需要注意的一点是sort函数的第二个参数dataLength是必须要的,我之前想利用sizeof(shuzu)/sizeof(shuzu[0]=6这样的道理,在sort函数里用sizeof(data)/sizeof(*data)来代替dataLength,结果发现未能如愿以偿,原因就是sort函数的第一个参数data是个指针,也就是地址,sizeof(data)是4,而不是例子中的sizeof(shuzu)=20,这里编译器是不知道这个地址后会有多少个数据,需要人为指定长度,这个懒是偷不了了。








0
0
查看评论

C语言-用指针实现冒泡排序

#include #define N 4 //冒泡法用指针实现 //输入 int *enterNumber(); //排序 void sortNumberAsc(int *ptr); //输出 void printNumber(int *ptr); int *enterNumber(){ ...
  • qiuxuewei2012
  • qiuxuewei2012
  • 2012-12-19 13:58
  • 2755

C语言——经典的两个数互换的程序——更好的理解指针!!!

# include<stdio.h> int main(void) { void huhuan(int ,int); void huhuan_1(int *,int *); void huhuan_2(int *,int *); int a=3; int...
  • jingzi123456789
  • jingzi123456789
  • 2016-05-11 15:20
  • 4788

C语言中如何用指针交换两个数的大小

如何用传址的方式交换两个数的大小 首先先看第一个程序,用函数的调用来解决看似正确实则运行出来的结果是错误的 #define _CRT_SECURE_NO_WARNINGS 1 #include #include #include int JH(int x, int y); int main() { ...
  • persistence_s
  • persistence_s
  • 2016-10-01 11:04
  • 1653

C语言利用指针在函数中交换两个数的思考

这个是一个深刻理解指针和函数的问题。本来自己当初很认真的看过这个问题,可是现在搞运维去了,对linux倒是挺熟的,结果把以前的知识忘了。哎,真是悲哀。今天突然有个s b问我,我一时还有点懵,这里记录一下。 void swap1(int *a,int *b) { int *p;...
  • qq_25417713
  • qq_25417713
  • 2016-12-15 22:18
  • 6151

解惑——用指针交换两个数字时所犯的错误

以前经常刚开始写c的时候经常犯错,想想也很有意思,最近正好趁着这个时光 做了一下总结。c中指针的使用时非常重要的,但是无论是什么语言,都要首先树立内存空间这一概念,这样的话会很容易找到不同语言之间的相似点。首先我们要明白,一个内存单元的地址就叫做指针。那什么是内存单元呢?一般来说我们把存储器中的一个...
  • dd864140130
  • dd864140130
  • 2014-11-12 01:16
  • 1140

C语言中交换两个数的方法

问题描述:程序中有两个数a,b,其中a=4,b=5,现在希望交换两个数的值,使得a=5,b=4.在这里我总结了一下目前我已经掌握的C语言中交换两个数的方法,主要如下几种,下面我将分别来进行介绍。方法1: 使用一个临时变量来进行保存,这应该也是大家最容易想到的方法,话不多说,直接上代码。参考代码:#i...
  • yi_ming_he
  • yi_ming_he
  • 2017-05-06 11:35
  • 15680

C语言(^)位异或运算符运算符 交换两个数位置

c语言 ^运算符
  • sun261480188
  • sun261480188
  • 2017-12-17 12:38
  • 61

关于C语言中交换两个数的代码探讨

#include // There is no need to allocate the third position for temp void reverse_array(int a[], int cnt) { int first, last; for (first=0, last=cn...
  • dejingqianshen
  • dejingqianshen
  • 2016-09-09 10:45
  • 794

C语言实现交换两个数

C语言中要实现交换两个变量的值可以有很多种方法,下面是我收集的方法:方法一:使用临时变量void exchange(int *a, int *b){ int temp = 0; temp = *a; *b = *a; *a = temp;} 方法二:不使用临时变量void e...
  • flyingstarwb
  • flyingstarwb
  • 2009-06-24 22:18
  • 14237

C语言中—— 三种方法实现两个数值交换

#include int main(int argc, const char * argv[]) {     int a,b;     printf("请输入两个数:");   ...
  • u012189584
  • u012189584
  • 2014-01-23 12:38
  • 2520
    个人资料
    • 访问:16520次
    • 积分:294
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:4篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论