1.函数指针
程序运行期间,每个函数都会占用一
段连续的内存空间。而函数名就是该函数所
占内存区域的起始地址(也称“入口地址”)。
我们可以将函数的入口地址赋给一个指针变
量,使该指针变量指向该函数。然后通过指
针变量就可以调用这个函数。这种指向函数
的指针变量称为“函数指针”。
使用方法
#include <stdio.h>
void PrintMin(int a,int b) {
if( a<b )
printf("%d",a);
else
printf("%d",b);
}
int main() {
void (* pf)(int ,int);
int x = 4, y = 5;
pf = PrintMin;
pf(x,y);
return 0;
}
例子:
C语言快速排序库函数:
void qsort(void *base, int nelem, unsigned int width,
int ( * pfCompare)( const void *, const void *));
可以对任意类型的数组进行排序
实例:
下面的程序,功能是调用qsort库函数,将一个unsigned int数组按照个
位数从小到大进行排序。比如 8,23,15三个数,按个位数从小到大排
序,就应该是 23,15,8
#include <stdio.h>
#include <stdlib.h>
int MyCompare( const void * elem1, const void * elem2 )
{
unsigned int * p1, * p2;
p1 = (unsigned int *) elem1; // “* elem1” 非法
p2 = (unsigned int *) elem2; // “* elem2” 非法
return (* p1 % 10) - (* p2 % 10 );
}
#define NUM 5
int main()
{
unsigned int an[NUM] = { 8,123,11,10,4 };
qsort( an,NUM,sizeof(unsigned int), MyCompare);
for( int i = 0;i < NUM; i ++ )
printf("%d ",an[i]);
return 0;
}
2.位运算
用于对整数类型(int,char, long 等)变量中的某一位(bit),
或者若干位进行操作。
按位与 “&”
将参与运算的两操作数各对应的二进制位进行与
操作,只有对应的两个二进位均为1时,结果的对
应二进制位才为1,否则为0。
按位或 “|”
将参与运算的两操作数各对应的二进制位进行或操
作,只有对应的两个二进位都为0时,结果的对应
二进制位才是0,否则为1。
按位异或 “^”
将参与运算的两操作数各对应的二进制位进行异或操作,
即只有对应的两个二进位不相同时,结果的对应二进制
位才是1,否则为0。
按位非 “~”
按位非运算符“~”是单目运算符。
其功能是将操作数中的二进制位0变成1,1变成0。
左移运算符 “<<”
表达式:
a << b
的值是:将a各二进位全部左移b位后得到的值。左移时,高位
丢弃,低位补0。a 的值不因运算而改变。
右移运算符 “>>”
表达式:
a >> b
的值是:将a各二进位全部右移b位后得到的值。右移时,移出最右边
的位就被丢弃。 a 的值不因运算而改变。