深度理解陣列指標,指標陣列等
#指標陣列 ##定義 指標陣列是陣列,是一個存放指標的陣列 ##指標陣列有 ###整形指標陣列 ```int *arr[10];`` 存放整型指標的陣列 ###字元型指標陣列
int i=0;
char *arr[]={"good","hello","world"};
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
printf("%s ",arr[i]);
}
字元型指標陣列每一個元素存放字元型指標,該指標指向每一個字串的首地址。
#陣列指標 ##定義 我們已經知道,int *p; 整型指標是能夠指向整型的指標;char *p;字元指標是能夠指向字元的指標,那麼陣列指標就是能夠指向陣列的指標,陣列指標是指標
int (*p)[10];//p先和*結合,說明p是一個指標變數,指標指向的是一個大小為10的整形陣列,所以p是一個指標指向的是一個數組,p叫陣列指標
如果*p不帶括號呢?
int *p[10]//由於[]的優先順序是高於*的,可以知道這是一個指標陣列
所以二者有型別的差異 ##陣列指標的使用
int arr[10]={0};
int (*p)[10]=&arr;
p是陣列指標存放的是陣列arr的地址
#函式指標 ##定義 函式指標是指向函式的指標變數,也可以理解為存放函式地址的指標,宣告如下
int (*p)(int);
p先和*結合說明p是指標,指標指向的是一個函式,這個函式的引數是int,返回值型別為int ##函式指標的兩個用途 1:呼叫函式
#define _CRT_SECURE_NO_WARNINGS 11
#include<stdio.h>
#include<stdlib.h>
int ADD(int a, int b)
{
return a + b;
}
int main()
{
int(*p)(int, int) = 0;
int a = 2;
int b = 3;
int ret = 0;
p = ADD;
ret = (*p)(a, b);
printf("%d\n", ret);
system("pause");
return 0;
}
2:做函式的引數
void (*signal(int,void(*)(int)))(int);
解釋:1>signal是一次函式宣告 2>signal 函式的第一個引數是int,第二個引數是函式指標void (*)(int),這個函式指標指向的函式引數為int,返回值為void 3>signal函式的返回型別為一個函式指標,改函式的指標指向的函式引數為int,返回值為void
#函式指標陣列 ##定義 把函式的地址存到一個數組中,這個陣列就叫做函式指標陣列
`` int (*p[10])();
p先和[]結合,說明p是陣列,陣列的內容是int(*)()的指標
##用途
使用函式指標陣列實現一個計算器
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int Div(int x, int y) { return x / y; } int mul(int x, int y) { return xy; } int sub(int x, int y) { return x - y; } int add(int x, int y) { return x + y; } int main() { int x = 0; int y = 0; int ret = 0; int input = 1; int (p[5])(int x, int y) = { 0, add, sub, mul, Div }; while (input) { printf("\n"); printf(" 1.add 2.sub \n"); printf(" 3.mul 4.div **\n"); printf("******\n"); printf(“請選擇:\n”); scanf("%d", &input); if (input > 0 && input < 5) { printf(“請輸入兩個運算元:\n”); scanf("%d%d", &x, &y); ret = (*p[input])(x, y); printf("%d\n", ret); } else { printf(“輸入有誤\n”); }
}
system("pause");
return 0;
}
#指向函式指標陣列的指標
##定義
指標指向一個數組,這個陣列的元素都是**函式指標**
void test(const char str) { printf("%s\n",str); int main() { //函式指標p void (p)(const char)=test; //函式指標的陣列pArr void (pArr[5])(const char str); //指向函式指標陣列的指標pp void ((pp)[10])(const char)=&pArr; return 0;
}