本文共 1800 字,大约阅读时间需要 6 分钟。
//1、malloc指针转化#include#include int main() { char* p[5]; char arr[5][10] = { "hello", "abc", "world", "ab", "wangdao" }; int i, j, count; char* tmp; char** p2; //向这个空间中的元素存储指针,存储为char* //使用动态的指针数组,必须把一级指针强转成二级指针 p2 = (char **)malloc(count * sizeof(char*)); //将void*指针强转成二级指针 for (i = 0; i < 5; i++) { p[i] = arr[i]; } return 0;}//2、动态开辟二维数组#include int main() { int iRow; char (*p)[10]; scanf("%d", &iRow); //堆区开辟二维数组的使用 p =(char(*)[10])malloc(10 * iRow); //需要用到数组指针 strcpy(p[0], "lili"); strcpy(p[1], "xiongda"); return 0;}//3、函数指针void fnPrinta() { printf("I am fnPrinta\n");}void fnPrintb(void (*p)()) { p(); //调用你传递给它的行为}typedef void (*pfunc)();void f1() { putchar(1);}void f2() { putchar(2);}void f3() { putchar(3);}#include int main() { void (*p)(); //需要给函数传递一个行为时就需要使用函数指针 pfunc funcArr[3] = { f1, f2, f3}; //函数指针数组 for (int i = 0; i < 3; i++) { funcArr[i](); //循环在执行定义的三个函数 } p = fnPrinta; fnPrintb(p); return 0;}//4、函数的嵌套调用#include #include jmp_buf envbuf; //jmp_buf为一个结构体,用来存储寄存器之前的一个状态void b() { printf("I am func b\n"); longjmp(envbuf,2); //回到envbuf保存的状态,第二个参数是setjmp的返回值,由自己定义} //但不能填0,如果填0,setjmp返回值强制转成1void a() { printf("before b, I am func a"); b(); printf("finish b, I am func a\n"); //不会打印这句话}int main() { int ret; //存储返回值,第一次setjmp的返回值为0,后面的返回值是longjmp的参数值 ret = setjmp(envbuf); //将目前的状态存到envbuf中 if (ret == 0) { a(); } return 0;}//将jmp_buf envbuf定义为局部变量的实现方式#include #include void b(jmp_buf envbuf) { printf("I am func b\n"); longjmp(envbuf, 2); } void a(jmp_buf envbuf) { printf("before b, I am func a"); b(); printf("finish b, I am func a\n"); }int main() { jmp_buf envbuf; int ret; ret = setjmp(envbuf); if (ret == 0) { a(envbuf); } return 0;}
转载地址:http://zxxmb.baihongyu.com/