C/C++中定义指针(先声明再初始化)
int *px;
px=&x;
其简洁写法为
int *px=&x;
这种简洁写法最容易造成的误解的是int* a,b,c;中a,b,c都当做是声明的指针,但事实上声明a为int型指针,b和c只是普通int型变量。
另外,这种简洁写法在指针传递或者引用传递时候也会造成直观感觉上的混乱,举一个简单的例子分析如下:
#include <stdio.h>
void add_1(int *p_come){*p_come=*p_come+1;}
//传过来地址px或&x直观上感觉就是划等号,这种感觉是源自定义简洁些法int *p_come=&x;
//函数之间的参数传递并不是划等号,把地址px或&x传递到*p_come,就如同p_come=&x;
//*p_come表示的是指针对应的值,但传递*p_come却传递的是*p_come本身也就是p_come里面存放的地址
//不能理解为void add_1(int *p_come){p_come=p_come+1;}这样返回main以后x并未+1
void add_10(int &address_come){address_come=address_come+10;}
//函数体里面address_come就是*&address_come
//函数之间的参数传递并不是划等号,把x传递到&address_come,就如同*&address_come=x;
int main(int argc, char* argv[])
{
int x=1;
{
int *px;
px=&x;
add_1(px);
//等同于add_1(&x);
//px=&x;不要被int *px=&x;的定义简洁写法干扰
printf("%d\n",x);
}
//出了此块x仍为修改后的值2
{
add_10(x);
//此处直接传给x而非&x
printf("%d\n",x);
}
return 0;
}