C篇的系列文章并不会深入去剖析某个语法,而是介绍C存在着哪些知识点。指针高级也同样如此,介绍指针数组、二重指针、数组指针、函数指针、指针传参。最后使用这几种语法做一个冒泡排序
- 指针数组
#include <stdio.h>
int main(void)
{
char* chPointer[2] = {"hello", "world"}; // 存储指针的数组
for(int i = 0; i < 2; i++) {
printf("%s\n", *(chPointer+i));
}
}
- 二重指针
#include <stdio.h>
int main(void)
{
int index = 1;
int* a = NULL;
int** b = NULL; // 二重指针
a = &index;
*a = 2;
printf("%d\n", index);
b = &a;
**b = 3;
printf("%d\n", index);
}
- 数组指针
#include <stdio.h>
int main_demo(void)
{
int a[3] = {1, 2, 3};
int (*p)[3] = NULL;// 表示指针指向一个包含3个元素的int数组
p = &a;
printf("%d\n", (*p)[2]);
return 0;
}
int main(void)
{
char str[3][10] = {"hello", "my", "language"};
char* ch = NULL;
char (*cr)[10] = NULL;
cr = &str[0];
printf("%s\n", *(cr+1));
ch = str[0];
printf("%s\n", (ch+20));
}
- 函数指针
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main(void)
{
int a = 3, b = 4;
int (*p)(int, int) = NULL;
p = add;
printf("%d\n", p(a, b));
}
#include <stdio.h>
void printStr(char **ch, int len)
{
for(int i=0; i<len; i++) {
printf("%s\n", *(ch+i));
}
}
void printDefined(void fn(char**, int), char **arr, int len)
{
fn(arr, len);
}
int main(void)
{
char* arr[3] = {"hello", "my", "c"};
void (*p)(char**, int) = NULL;
p = printStr;
//printStr(arr, 3);
//p(arr, 3);
printDefined(p, arr, 3);
}
- 指针实现冒泡排序
#include <stdio.h>
#include <time.h>
void initArr(int* arr, int len);
void showArr(int* arr, int len);
void swap(void* left, void* right);
int cmp(void* left, void* right);
void bubbleSort(void* arr, int len, int (*cmp)(void*, void*), void swap(void*, void*))
{
int i,j;
for(i =0; i< len; i++) {
for(j=0; j< len-i-1; j++) {
if(cmp( (void *)((int*)arr + j), (void*)((int*)arr + j + 1) ) > 0) {
swap( (void*)((int*)arr + j), (void*)((int*)arr + j + 1));
}
}
}
}
int main(void)
{
int a[10];
initArr(a, 10);
showArr(a, 10);
bubbleSort(a, 10, cmp, swap);
printf("bubbleSort : \n");
showArr(a, 10);
}
int cmp(void* left, void* right)
{
int x = *((int*)left);
int y = *((int*)right);
return x > y;
}
void swap(void* left, void* right)
{
int tmp;
tmp = *((int*)left);
*((int*)left) = *((int*)right);
*((int*)right) = tmp;
}
void initArr(int* arr, int len)
{
srand(time(NULL));
while(len > 0) {
len--;
*(arr + len) = rand() % 100;
}
}
void showArr(int* arr, int len)
{
int index = 0;
while(index < len)
{
printf("%d\n", *(arr+index));
index++;
}
}
版权声明:本文为xuandaijian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。