-
-
[原创]我所理解的指针
-
发表于:
2012-10-18 17:42
4310
-
菜鸟拙见,请,勿喷!不对的地方请多指教!
指针中存放有另一个对象的地址,说白了就是存放了一个地址,打个比方,我要找张三,但是我没有张三的电话号码,但我有李四的电话号码,李四有张三的电话号码。于是我就先找到李四要张三的电话号码,李四就相当于是一个指针。我通过李四(地址)找到了张三(变量)!
每个指针都有一个相关的类型,不同类型的指针之间的区别不是在指针表示上,也不是在指针所持有的值上。而是,指针类型可以告诉编译器怎样解释特定地址内存中的内容。以及该内存跨多少个内存单元,就如一个int行指针寻址到1000内存处,那么32位的机器上,跨越的地址空间为1000-1003;
“*”为解引用操作符来间接的读写指针所指向的对象。
int i=100;
int *pi = 0;
int *pi2 = &i;//pi2被赋值为i的地址;
pi = pi2;
pi2 = 0;//pi2现在未指向任何对象;
pi = i;//指针不能持有非地址值;
//指针不能被初始化或赋值为其他类型对象的地址值;
double dval;
double *pd = &dval;
//无效的类型赋值
//int * <==double *
pi = pd;
pi = &dval;
不是说pi不能有与dval相关联内存的地址:能,但不允许,因为虽然pi与pd可以有相同的内存值,但对那块内存解释完全不同。
指针可以让它的地址值增加或减少一个整数值,并不是对数据的加减运算,指针加1,意味着增加了该类型一个对象的长度。
int i=10;
int *pi=&i;//假如i的地址为0x0012ff7c
printf("%p\r\n",pi);
*pi = *pi+1;//增加了pi指向数据的值
printf("%d\r\n",*pi);
pi = pi+1;//增加的是地址的值,现在的地址变为0x0012ff7c+sizeof(int)=0x0012ff80;
printf("%p \r\n",pi);
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)