还有一种情况:
int *a,*b;//两个int指针
a=new int;//a动态分配
b=a;//b等于a,也就是修改b的内容(*b)就是修改a的内容(*a)
...//代码
cout<<*a;//输出a的内容(也就是那个动态int)
delete a;//删除a,因为这是动态分配的
另外纠正:&不是取值,而是取址。
&代表引用或者取地址
数组名本身代表的是数组第1个元素的地址,第i个就是a+i-1,当然不能越界
例如:int a[0];
int *p =a;//p是指向整数的指针
或者 int **p = &a;//p是一个指针,它指向一个指向整数的指针
明白了吗?没必要死记,对数组名也可取地址,
int *pint = new int;
int *parr = new int[4];
只要赋值符右边的值是地址,就可以用指针接受,右值要不要加&(取地址符),看右值表达式的写法了。
完全没必要死记硬背!! 根据具体情况而定
给指针变量赋值的时候,看等号右边是什么了,如果是地址,那就直接赋就可以了,如果不是地址,就加个&
比如:
int* p; int a[5]; p=a;
这句话之所以不用&,是因为对于一维数组,数组名本来就是这个数组的首地址,它是个地址,所以直接赋给p
而对于二维数组 int a[5][5]; a[i]本身就是地址,是a[i][0]的地址,所以比如你要把a[2][0]的地址赋给p,有两种写法:
1.p=a[2]; (因为a[2]本身就是a[2][0]地址)
2.p=&a[2][0];
所以都是依具体情况而定了
还有一种情况:
int
*a,*b;//两个int指针
a=new
int;//a动态分配
b=a;//b等于a,也就是修改b的内容(*b)就是修改a的内容(*a)
...//代码
cout<<*a;//输出a的内容(也就是那个动态int)
delete
a;//删除a,因为这是动态分配的
另外纠正:&不是取值,而是取址。
0