
int *arr[10]
#include
int main()
{
int a = 10;
int b = 11;
int c = 12;
int* q = &a;
int* p = &b;
int* l = &c;
int* arr[] = { p,q,l };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << *(arr[i]) << endl;
}
return 0;
}
int (*arr)[10]
#include
int print(int(*arr)[10])
{
}
int main()
{
int brr[10][10] = {0};
print(brr);
return 0;
}
int *(*p[3])(int)
1.先找到变量名 p
2.p右边是[]说明是一个数组 数组
3.p左边是一个指针 指针数组
4.右边是一个函数 函数指针数组
5.左边是一个指针 指针函数指针数组
int (*fn(int n))(int,int)
fn是个函数名,里面有int n参数,fn函数的返回值是个指针,这个指针指向函数int xx(int,int)此类函数
int max(int a,int b)
{
return a > b ? a : b;
}
int min(int a,int b)
{
return a < b ? a : b;
}
int Add(int a,int b)
{
return a + b;
}
int Sub(int a,int b)
{
return a - b;
}
int Mul(int a,int b)
{
return a * b;
}
int Div(int a,int b)
{
return a / b;
}
int Mod(int a,int b)
{
return a % b;
}
int (*fn(int n))(int,int)
{
return max;
}
void print(int n)
{
cout<<"print n = "<<n<<endl;
}
void (*fnn(int n,int (*p)(int,int)))(int)
{
cout<<"fnn : n = "<<n <<","<< p(6,9)<<endl; //max(6,9)
return print;
}
void main()
{
void (*p)(int) = fnn(5,max); //p = print
p(100);//print(100)
}
上面代码函数有加减乘除,求最大最小值,从主函数开始分析,首先调用fnn函数,fnn函数两个参数分别为一个整形和一个函数指针,所以将max函数名传进去当作参数,形参p指向max函数,比较6,9的大小,返回print函数
void (*fnn(int n,int (*p)(int,int)))(int)
{
cout<<"fnn : n = "<<n <<","<< p(6,9)<<endl; //max(6,9)
return print;
}
(*p)(int)是一个函数指针,指向刚刚返回的print函数,调用print(100),打印100

void print(int n)
{
cout<<"print n = "<<n<<endl;
}
void main()
{
int (*p[])(int,int) = {max,min,Add,Sub,Mul,Div,Mod};
int n = sizeof(p)/sizeof(p[0]);
for(int i = 0;i<n;++i)
cout<<p[i](4,9)<<endl;
}

void mymalloc(char *p,int n)
{
*p = (char*)malloc(n);
}
void main()
{
char *str = NULL;
mymalloc(str,100);
strcpy(str,"hello world");
puts(str);
free(str);
str = NULL;
}
以上代码能否完成malloc函数的功能?
答案: 不能,要改变一级指针内容传参时候必须传入二级指针,这样才能修改一级指针的内容