#include "string.h"
#include "stdio.h"
#include "stdlib.h"
// 如何定义一个数组类型
// 如何定义一个数组指针的类型
// 如何定义一个指向数组类型的一个指针变量
void main01() {
// int array[10];
// 如何定义一个数组类型
typedef int(MyArrayType)[10];
MyArrayType myArray; // <==> int array[10]
myArray[0] = 0;
{
int array2[10];
// 如何定义一个数组指针的类型
typedef int(*PtrMyArrayType)[10];
PtrMyArrayType ptrMyArray;
ptrMyArray = &array2;
(*ptrMyArray)[0] = 11;
printf("array2[0]:%dn", array2[0]);
{
int a = 10;
int* p = NULL;
p = &a;
}
}
{
// 如何定义一个指向数组类型的一个指针变量
int array3[10];
int(*ptrM)[10]; // 定义一个指针变量,告诉c编译器给我分配4个字节内存,这个变量指向一个数组。
// ptrM++会后移一个数组单位:(4*10) 个字节
ptrM = &array3;
(*ptrM)[0] = 12;
printf("array3[0]:%dn", array3[0]);
}
system("pause");
}
// 如何定义函数类型
// 如何定义函数指针类型
// 如何定义一个指向函数的指针变量
//testFunc是函数名,函数名代表函数首地址,函数名就是函数指针
int testFunc(int i) {
printf("i:%dn", i);
return 0;
}
void main() {
// 定义函数类型
typedef int (MyFuncType)(int);
MyFuncType *myfunc; // 函数指针变量
myfunc = testFunc;
//myfunc = &testFunc; // ok 对函数名字&取地址,和不取地址,效果一样。兼容之前代码。
myfunc(10); // 通过函数指针变量,可以找到函数入口,可以执行函数
// <==>
typedef int (*MyFuncTypePtr)(int); // 定义一个函数指针类型
MyFuncTypePtr myfuncptr;
myfuncptr = testFunc;
myfuncptr(20);
// 直接定义一个指向函数的指针变量
int (*ptrMyFuncVar)(int);
ptrMyFuncVar = testFunc;
ptrMyFuncVar(40);
system("pause");
}