指针作为函数参数小结

刚刚看代码看到一个地方用双指针作为函数参数,调用的地方需要取到有效值。我想也没想就修改了一下代码,结果运行后是错误的。

仔细想了想,觉得有必要捋一捋,就写了下面的测试代码作为小结。我错用了第一种错误的办法。

通过指针作为参数传值,出了传递入参外,通常也是为了能够通过这个指针返回结果。我的总结是这样的:

1. 如果是单指针,一般直接修改指针指向变量的值;

2. 如果是双指针,一般修改双指针指向指针的值,即赋一个有效的地址给这个指针。

所以要注意的是,这个地址指向的内存必须在被取值之前是有效的,如果是栈内存,出栈后就可能没用了;如果是堆内存,不能被释放;所以最好是全局或者静态内存。

代码:

阅读更多指针作为函数参数小结

calloc

转自百度百科:http://baike.baidu.com/view/653964.htm

函数简介

  • calloc是一个C语言函数
  • 函数名: calloc
  • void *calloc(unsigned n,unsigned size);
  • 功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
  • 跟malloc的区别:
  • calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
  • 用 法: void *calloc(unsigned n,unsigned size);
  • 头文件:stdlib.h或malloc.h
  • 相关函数:mallocreallocfree

阅读更多calloc

sprintf函数的用法

转自: http://www.programfan.com/blog/article.asp?id=12763    转自《CSDN 社区电子杂志——C/C++杂志》

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。

sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] … );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:
格式化字符串上。

阅读更多sprintf函数的用法

排序算法全集【附C++代码】

本文转自【Vega的网络小窝】http://blog.donews.com/vega/articles/911246.aspx
略有修改,加了注释,且原先部分代码有错误
快速排序法速度真的是非同一般!!!
30000个随即整数,冒泡法和交换法平均9s,插入法3s,快速法0!!!

排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将给出详细的说明。
对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲。
我将按照算法的复杂度,从简单到难来分析算法。
第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为O(N*N)(因为没有使用word,所以无法打出上标和下标)。
第二部分是高级排序算法,复杂度为O(Log2(N))。这里我们只介绍一种算法。另外还有几种算法因为涉及树与堆的概念,所以这里不于讨论。
第三部分类似动脑筋。这里的两种算法并不是最好的(甚至有最慢的),但是算法本身比较奇特,值得参考(编程的角度)。同时也可以让我们从另外的角度来认识这个问题。
第四部分是我送给大家的一个餐后的甜点——一个基于模板的通用快速排序。由于是模板函数可以对任何数据类型排序(抱歉,里面使用了一些论坛专家的呢称)。
现在,让我们开始吧:

阅读更多排序算法全集【附C++代码】