第一周 从C走进C++

第一节课 函数指针

定义形式

返回值类型名 (*指针变量名)(参数类型1,参数类型2……)

int (*pf)(int, char)
使用方法

#include
int PrintMin(int a, int b){
    pass
}
int main(){
    void (*pf)(int,int);//先声明一个函数指针
    int x = 4,y = 5;
    pf = PrintMin;//把之前建立的函数赋值给这个指针,就可以把这个指针当函数用了
    pf(x,y);
    return 0;
}

函数指针与qsort函数

qsort是c语言自带的一个快速排序函数,但是它的一个参数是另一个函数,即需要自己编写两个数比较的规则.
void qsort(void *base, int nelem, unsigned int width, int (*pfCompare)(const void *, const void *))
*pfCompare:调用pfCompare比较两个元素,若返回负整数,则元素1应排在前面,反之后面
*base:待排序数组的起始地址,即数组名
nelem:待排序数组的元素个数
width:待排序数组的每个元素的大小,以字节为单位
实例
调用qsort函数,将一个unsigned int 数组按照个位数从小到大排序,比如8,23,15,排序后为23,15,8

#include
#include
int myCompare(const void *a, const void *b){
        unsigned int *first , *second;
        first = (unsigned int *)a;
        second = (unsigned int *)b;//此处不能直接用*b,因为传入的a为const void *类型,见注释
        return (*first%10)-(*second%10);
}
#define NUM 5
int main(){
        unsigned int num[NUM] = {8,123,11,10,4};
        int (*pfCompare)(const void *, const void *);
        pfCompare = myCompare;
        qsort(num,NUM,sizeof(unsigned int),pfCompare);//之后数组已被排序修改
        for(i = 0;i
  • 数组初始化用{}
  • 函数名字和函数指针类型是匹配的
  • void *为不确定类型指针,void *赋给其他类型的变量时,需要进行强制类型转换
  • 定义myCompare时参数不能为unsigned int *a,不然不能赋值给pfCompare并传给qsort

第二节课 命令行参数

使用方法
使用命令行参数时,需要在main函数加入参数,这样通过命令行执行程序时main会接收两个参数,这两个参数是os自动根据命令行处理好后交给main的。

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

argc:用命令行执行程序时,参数的个数,包括程序文件名本身(可以用来作遍历数组时的循环边界)
argv:参数指针数组,每个元素都是char *类型,比如argv[0]就是第一个参数,即程序文件名,argv[1]就是第二个参数,随便用户传入的是什么就是什么

第三节课 位运算

按位与 &
作用:清零某些位并保持其他位不变(清零对应0,不变对应1),或者判断某些位是0是1(和1与)
按位或 |
作用:将某些位置1其他位不变(置1和1或,不变和0或)
按位异或 ^
作用:将某些位取反,其他位不变(任何数与1异或取反,与0异或不变)
特点:

  • 若a^b=c,则c^b=a,且c^a=b,穷举法可证
  • 可以用异或运算交换变量值,而不用临时变量
int a = 5, b = 7;
a = a^b;
b = b^a;
a = a^b;

穷举法可证
按位非 ~
单目运算符,就是取反码。用法: ~21
左移运算符 <<
作用:a< 右移运算符 >>
作用:除法,除不尽往小取整。右边低位丢弃,左边高位添符号位

你可能感兴趣的:(第一周 从C走进C++)