指针进阶3

相关标签:
#define _CRT_SECURE_NO_WARNINGS 1
//数组参数、指针参数
//一、一维数组传参
//#include
////以下为指针及数组传参时的传递写法都是正确
//void test(int arr[]){}
//void test(int arr[10]) {}
//void test2(int *arr[]) {}
//void test2(int* arr[20]) {}
//void test2(int** arr) {}//*arr:一级指针的地址放入**arr二级指针中
//int main()
//{
// int arr[10] = { 0 };
// int* arr2[20] = { 0 };
// test(arr);
// test2(arr2);
// return 0;
//}
//二、二维数组传参
//#include
//void test(int arr[3][5]){}
////void test(int arr[3][]){}//二维数组只能省略行不能省略列
//void test(int arr[][5]) {}
//void test(int* arr) {}//错误写法
//void test(int** arr) {}//错误写法
//void test(int(* arr)[5]) {}//指针传址写法
//int main()
//{
// int arr[3][5] = { 0 };
// test(arr);//二维数组传参
// return 0;
//}
//三、一级指针传参(接收整形变量地址或者一级指针本身)
//#include
//void test(int* p, int sz)
//{
// int i = 0;
// for (i = 0; i < sz; i++)
// {
// printf(" %d ", *(p + i));
// }
//}
//int main()
//{
// int arr[10] = { 1,2,3,4,5,6,7,8,9,10};
// int* P = arr;
// int sz = sizeof(arr) / sizeof(arr[0]);
// test(arr, sz);
// return 0;
//}
//思考:当一个函数的参数部分为一级指针时函数可以接收什么参数
//#include
//void test(int* p){}
//void test1(char*pc) {}
//void test2(const char* pc) {}
//int main()
//{
// int a = 10;
// int* p = &a;
// //可以传递以下形式:
// test(&a);
// test(p);
// char ch = 'w';
// const char ch2 = 'qwe';
// char* pc = &ch;
// const char* pc1 = &ch2;
// test1(&ch);
// test1(pc);
// test2(&ch2);
// test2(pc1);
// return 0;
//}
//四、二级指针传参(接受一级指针地址或二级指针本身)
//#include
//void test(int** ptr)
//{
// printf("num=%d\n", **ptr);
//}
//int main()
//{
// int n = 10;
// int* p = &n;
// int** pp = &p;
// test(pp);
// test(&p);
// return 0;
//}
//五、函数指针-指向函数的指针-存放函数地址的一个指针
//1、函数调用
//#include
//int ADD(int x, int y)
//{
// int z = 0;
// z = x + y;
// return z;
//}
//int main()
//{
// int a = 10, b = 20;
// int D = ADD(a, b);
// printf("%d\n", D);
// return 0;
//}
//2、函数指针调用
//#include
//int ADD(int x, int y)
//{
// int z = 0;
// z = x + y;
// return z;
//}
//int main()
//{
// //函数地址打印
// //&ADD与ADD都是函数的地址
// printf("%p\n", &ADD);
// printf("%p\n", ADD);
// int (*pa)(int, int) = ADD;
// //int (*pa)(int, int)的解读如下:
// //将函数地址ADD(&ADD)存放在pa中,但是要保证pa是指针则可以写为(*pa),指向函数的类型为(*pa)(int, int),返回类型为int (*pa)(int, int)
// printf("%d\n", (*pa)(2, 3));
// return 0;
//}
//实列1:
//#include
//void print(const char* str)
//{
// printf("%s\n", str);
//}
//int main()
//{
// void (*p)(const char*)=print;
// //void (*p)(const char*)=print;理解如下:
// //将函数print的地址存放在(*p)指针中且该指针指向函数,函数的参数类型为(const char*),且函数返回类型为void;
// (*p)("hello bit");
// //(*p)("hello bit");理解如下:
// //p里存放函数的地址,(*p)调用该函数地址,把("hello bit")传参传给指针str
// return 0;
//}
//实列2:分析以下代码
//代码1
((*(void(*)()0))();
//代码2
void (*signa1(int, void(*)(int)))(int);
文章来源: https://blog.51cto.com/u_15812356/5786086
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报