您的位置:首页 > 编程语言 > C语言/C++

C++指针

2015-10-08 10:25 246 查看
1.*pa[]与(*pa)[]区别:

*pa[3]: 运算符[]优先级高于*,所以*pa[3]表明pa是包含3个指针的数组;

(*pa)[3]: pa是一个指针,它指向一个包含3个元素的数组。

2.“const int *a” 与“int* const a”的区别:

(1)const int *a = &b:不允许通过a来修改b的值,但是a可以指向其他值;

(int const *a = &b与上面的情况一样,可以指向其他值,但不能通过a来修改b的值)

(2)int* const a = &b:运行通过a来修改b的值,但是a不可以指向其他值。

int b =10;
const int* a;//不一定需要初始化
int* const a;//错误 没有初始化
int* const a = &b;//正确 必须初始化
a = &b;


  

总结:如果const位于*的左边,则const就用来修饰指针所指向的变量,即指针指向为常量,与1一样;

如果const位于*的右边,则const修饰指针本身,即指针本身是常量,与2一样。

eg:

void main()
{
int b =10;
int c = 5;
const int *a = &b;//a可以指向其他值,但是不能通过a来修改b的值
a = &c;//a指向c的值
int* const a2 = &c;//a2不可以指向其他值,但是可以通过a来修改c的值
(*a2)++;//通过a2来修改c的值
cout <<"a="<<*a<<endl;
cout <<"a2="<<*a2<<endl;
//结果a=6,a2=6
}


3.创建二维动态数组:

ar[m]
== *(*(ar+m)+n),而*(ar+m)+n表示a[m]
的地址

void main()
{
int n = 5;
//创建二维动态数组
int **a = new int*
;
for(int i=0;i<n;i++)
a[i] = new int
;

for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j] = i+j;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
//注意释放内存
for(int i=0;i<n;i++)
delete[]a[i];
delete[]a;
}


4.函数指针:

double (*pf)(int): pf是输入int类型返回double类型的指向函数的指针;

double *pf(int): pf是输入int类型返回double类型指针的函数:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: