函数指针
函数指针定义方式
- 定义一个函数类型:返回值是int,参数列表是(int, int)型
typedef int(TYPE_1)(int, int); //
- //定义一个函数指针类型: 指向的函数的返回值是int,参数列表是(int, int)型
typedef int(*TYPE_2)(int, int)
- 直接定义
int(*TYPE_3)(int, int) = NULL;
函数指针使用
- 定义的是函数类型
typedef int*(TYPE_1)(int,int); //返回值是 int*,参数列表是(int, int),定义的是函数类型
int* func(int a, int b)
{
int* c = (int*)malloc(4);
*c = a + b;
return c;
}
int main()
{
TYPE_1* my_fun = func;
int*c = my_fun(1, 2);
cout << *c << endl;
return 0;
}
- 定义的是函数指针
typedef int*(*TYPE_2)(int,int); //返回值是 int*,参数列表是(int, int) ,定义的是函数指针
int* func(int a, int b)
{
int* c = (int*)malloc(4);
*c = a + b;
return c;
}
int main()
{
TYPE_2 my_fun= func;
int*c = my_fun(1, 2);
cout << *c << endl;
return 0;
}
- 直接定义
int* func(int a, int b)
{
int* c = (int*)malloc(4);
*c = a + b;
return c;
}
int main()
{
int*(*my_fun)(int, int) = func;
int*c = my_fun(1, 2);
cout << *c << endl;
return 0;
}
数组指针
明白的概念
- 以下三个地址值是一样,但是意义不同
int array[10];
cout << &array << endl; int array[10] 类型数组首地址, int[10]* , 地址++,等价于+40
cout << &array[0] << endl; array[0]的地址 int* 地址++,等价于+4
cout << array << endl; 数组首地址 int* 地址++,等价于+4
数组指针的定义方式
1. //定义一个int[10]的类型
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef int(INT_10)[10]; //定义一个int[10]的类型
int main()
{
int array[10];
INT_10* arrar_10= &array;
for (int i = 0; i < 10; i++)
{
(*arrar_10)[i] = i; // *(arrar_10)=array :对指针进行降级才能操作int array[10];括号一定要加,结合性问题
cout << (*arrar_10)[i] << endl;
}
return 0;
}
2.//定义一个指向int[10]的类型的指针
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef int(*INT_10)[10]; //定义一个指向int[10]的类型的指针
int main()
{
int array[10];
INT_10 arrar_10= &array;
for (int i = 0; i < 10; i++)
{
(*arrar_10)[i] = i; // *(arrar_10)=array :对指针进行降级才能操作int array[10];括号一定要加,结合性问题
cout << (*arrar_10)[i] << endl;
}
return 0;
}
3.直接写一个指向int[10]的类型的指针
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int array[10];
int(*p)[10]= &array;
for (int i = 0; i < 10; i++)
{
(*p)[i] = i; // *(p)=array :对指针进行降级,括号一定要加,结合性问题
cout << (*p)[i] << endl;
}
return 0;
}