c++指针 初识
从JAVA转C++,开始对指针的理解,讲讲自己对指针的理解,指针也是一个变量类型而已,存的就是是某个对象或变量的地址,还是先上代码吧:代码最直接了:
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int i = 100 ; //赋值方法一 int *p =&i;//可以这样定义指针并且赋值 //赋值方法二 int *pt; pt = &i;
// *pt = &i 这样定义不行 ,赋值方法一那样定义就行 //下面是测试结果 printf("i: %d\n",i); /* //就是指向的某个变量的内存地址 可以看出 p = &i 跟上面的赋值赋值有点不同,开始我 一直 以为赋值方法是*p=&i;那么*p=&i应该也可以的; 也可能我理解能力差的缘故, */ printf("p: %d\n",p); printf("&i: %d\n",&i); printf("*p: %d\n",*p);//就是该内存地址的内容或值 printf("pt:%d \n",pt); printf("*pt:%d \n",*pt); /* 指针的内存地址,说明指针也有自己的内存地址,指针就是一个类型 */ printf("&pt:%d \n",&pt); printf("&p:%d\n ",&p); return 0;
上面就是我个人对指针的理解。
使用指针:
int * myPointer = new int ;
在此情况下,指针指向一个整数值的地址。为访问这个值,需要对这个指针解除引用。如下代码
*myPointer = 8;
int *myPoniter = new int ;//动态分配内存 printf("&myPoniter:%d\n ",&myPoniter); printf("*myPoniter:%d\n ",*myPoniter); *myPoniter =8; printf("&myPoniter:%d\n ",&myPoniter); printf("*myPoniter 8:%d\n ",*myPoniter); delete myPoniter;//释放内存
这里并没有改变指针的内存地址,指改变该内存地址的内容;
下面代码是对数组指针的理解;
const size_t size = 5; int int_arr[size] = {0,1,2,3,4}; int *b = int_arr; int *e = int_arr+size; printf("b:%d\n",b); printf("b++:%d\n",++b); printf("int_arr0:%d\n",&int_arr[0]);//b = &&int_arr[0] printf("int_arr1:%d\n",&int_arr[1]);//++b=&int_arr[1] printf("e:%d\n",e); for (int *pbegin = int_arr,*end =int_arr+ size;pbegin != end;++pbegin) { std::cout<<*pbegin<<endl; }