目录
在指针的类型中我们知道有一种指针类型为字符指针 char*
- int main()
- {
- const char* pstr = "hello bit.";
- printf("%s\n", pstr);
- return 0;
- }
那下面的这道题的结果又是什么呢?
- #include <stdio.h>
- int main()
- {
- char str1[] = "hello bit.";
- char str2[] = "hello bit.";
- const char *str3 = "hello bit.";
- const char *str4 = "hello bit.";
-
- if(str1 ==str2)
- printf("str1 and str2 are same\n");
- else
- printf("str1 and str2 are not same\n");
-
- if(str3 ==str4)
- printf("str3 and str4 are same\n");
- else
- printf("str3 and str4 are not same\n");
- return 0;
- }
- int* arr1[10]; //整形指针的数组
- char *arr2[4]; //一级字符指针的数组
- char **arr3[5];//二级字符指针的数组
- int *p1[10];
- int (*p2)[10];
答案是:int (*p)[10];
注:[ ]的优先级要高于*号的,所以必须加上()来保证p先和*结合。
函数指针本质上是指针。
- #include
- void test()
- {
- printf("hehe\n");
- }
- int main()
- {
- printf("%p\n", test);
- printf("%p\n", &test);
- return 0;
- }
输出的是两个地址,这两个地址都是 test 函数的地址。
那我们的函数的地址要想保存起来,怎么保存?
- void test()
- {
- printf("hehe\n");
- }
-
- int mian()
- {
- void (*ptest2)() = &test;
- return 0;
- }
数组是一个存放相同类型数据的存储空间,那要把函数的地址存到一个数组中,这个数组就叫函数指针数组,那函数指针的数组如何定义呢?
- int (*parr1[10])();
- int *parr2[10]();
- int (*)() parr3[10];
- void test(const char* str)
- {
- printf("%s\n", str);
- }
- int main()
- {
- void (*pfun)(const char*) = test; //函数指针pfun
- void (*pfunArr[5])(const char* str); //函数指针的数组pfunArr
- pfunArr[0] = test;
- void (*(*ppfunArr)[5])(const char*) = &pfunArr; //指向函数指针数组pfunArr的指针ppfunArr
- return 0;
- }