一、数组
int* num = (int*)malloc(sizeof(int) * 10); int** num = (int**)malloc(sizeof(int*) * 10);
for (int i = 0; i < 10; i++) {
num[i] = (int*)malloc(sizeof(int) * 10);
} int* num = (int*)malloc(sizeof(int) * 10);
memset(num, 0, sizeof(int) * 10); int num[10];
memset(num, 0, sizeof(num)); int cmp(const void* a, const void* b) {
int* aa = (int*)a;
int* bb = (int*)b;
//return *aa - *bb; //从小到大排序
return *bb - *aa; //从大到小排序
} //假设数组是2列
int cmp(const void* a, const void* b) {
int* aa = *(int**)a;
int* bb = *(int**)b;
//0列相同时,比较1列
if (aa[0] == bb[0]) {
//return aa[1] - bb[1]; //从小到大排序
return bb[1] - aa[1]; //从大到小排序
}
//0列不相同时
//return aa[1] - bb[1]; //从小到大排序
return bb[1] - aa[1]; //从大到小排序
} //比如对 int* nums 进行排序,数组大小为10,比较函数为cmp
//第一个参数为数组,第二个参数为数组大小,第三个参数为数组里单个元素的大小,第四个参数为比较函数cmp
qsort(nums, 10, sizeof(int), cmp); *returnSize = 10;*returnColumnSize = (int*)malloc(sizeof(int) * size);
for (int i = 0; i < size; i++) {
(*returnColumnSize)[i] = 10;
}二、字符串
常用字符串函数有如下这些:
strstr(arr, tmp); //在arr中从左到右查找第一个tmp,找到返回tmp开头的字符串的指针
strchr(arr, ch); //在arr判断是否有ch这个字符,没有的话返回NULL,有的话返回非空
strcmp(arr1, arr2); //比较arr1和arr2的大小,arr1大返回正值,arr1小返回负值,arr1和arr2相等返回0
strcpy(arr, tmp, tmp_size); //把tmp字符串复制到arr字符串里
strcat(arr, tmp); //将tmp字符串拼接到arr字符串的末尾
strtok(arr, tmp); //按tmp分割字符串arr,返回第一个分割的部分这里把完整的分割字符串过程写一下:
//strtok会使原字符串arr会变化成去掉第一个分割后的剩余字符串,所以分割前请先复制原串
//这里假设被分割成row个,每个的长度最长为col,用out来存每个分割部分
char** out = (char**)malloc(sizeof(char*) * row);
int idx = 0;
char* p = strtok(arr, tmp);
while (p != NULL) {
out[idx] = (char*)malloc(sizeof(char) * (col + 1)); //加1是字符串有结尾字符'/0'
out[idx++] = p;
p = strtok(NULL, tmp); //这里要用NULL
}三、指针
指针是C语言中比较常用的类型,也是C语言的灵魂,也是难点,出错点。主要还是知道到底想要表达什么意思也就自然而然了。指针是地址的意思,不同类型的变量所需地址空间大小不一样,所以也就需要区分不同类型的指针。“*”表示指针,“&”表示取地址。在判断指针是指向什么类型的时候,可以把变量去掉,剩下的就是指针所指向的。
int* a; //指向整型的指针,指向 int*
int** a; //指向整型指针的指针,指向 int**
int* a[n]; //指针数组,每个数组成员都是一个整型指针,int*,总共有n个指针
(int*)a[n]; //数组指针,指向数组的指针,指向(int*)[],总共就1个指针
int* func(); //指针函数,函数的返回值是1个指针
(int*)func(); //函数指针,指向函数的指针,指向(int*)(),总共就1个指针说明:指针类型的变量的值是随时变化的,相当于全局变量,所以在函数传参数的时候,如果要实时保留值的变化,就传入指针类型变量或者全局变量。与指针相关的数据结构,如列表、树等,在后面算法总结中再书写。