#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[2][5]={1,2,3,4,5,6,7,8,9,0};
int (*p)[5]=a;
cout<<"*p[1]="<<*p[1]<<endl;
cout<<"*(p[1]+1)="<<*(p[1]+1)<<endl;
char *q[5]={"a","b","c","d","e"};//指针数组这样初始化dev会有警告,但vc不会有任何警告;不建议读者用这种初始化。
cout<<"q[1]="<<q[1]<<endl;//因为q[10]为指针类型数组,所以q中存储的为地址。
return 0;
}
指针函数与函数指针
指针函数//返回值为指针的函数;
定义:类型名 * 函数名(参数列表);
Eg:int * max(int *x,int *y);
{
returen *x>*y?x:y;
}
函数指针//算法竞赛中基本不用,只顺便提一下,既为指向函数的指针;
定义:函数类型 (*指针名) (函数形参表);
Eg
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
int main()
{ int a=1,b=2;
int (*p)(int,int);
p=max; cout<<p(a,b);//也可以写成(*p)(a,b),其中*运算没有意义
p=min; cout<<p(a,b);
return 0;
}
指针与数组
c++中数组名既为一个地址;故可以赋值给指针变量;
Eg
int a[10];*p;
p=a;//正确;
二维数组—特殊的二阶指针;
int b[10][10];
将二维数组理解为矩阵;
b为二阶指针;
b所指位置为行,称为行指针;
对b进行一次*运算,便转换为列指针,从而确定每一个元素所在位置。
int a[10][10],**b;
b=a;//这种方式是错误的。