首页 > 代码库 > 指针学习小记

指针学习小记

  • 指针的值是指针本身存储的数值,这个值将被编译器当做一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。
  • 指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 
  • 运算符:&是取地址运算符,*是“间接运算符”。&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址是a的地址。*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。
  • 一个表达式的最后结果如果是一个指针,那么这个表达式就叫指针表达式。(例:)
1 int a,b;  
2 int array[10];  
3 int *pa;  
4 pa=&a;//&a是一个指针表达式。  
5 int **ptr=&pa;//&pa也是一个指针表达式。  
6 *ptr=&b;//*ptr和&b都是指针表达式。  
7 pa=array;  
8 pa++;//这也是指针表达式。
  • 可以声明一个指向结构类型对象的指针。  
 1 struct MyStruct  
 2 {  
 3 int a;  
 4 int b;  
 5 int c;  
 6 }  
 7 
 8 MyStruct ss={20,30,40};//声明了结构对象ss,并把ss的三个成员初始化为20,30和40。
 9 MyStruct *ptr=&ss;//声明了一个指向结构对象ss的指针。它的类型是MyStruct*,它指向的类型是MyStruct。
10 int *pstr=(int*)&ss;//声明了一个指向结构对象ss的指针。但是它的类型和它指向的类型和ptr是不同的。

所以如何访问成员变量

 1 ptr->a;2 ptr->b;3 ptr->c; 

 

以上只是摘抄的部分重点(个人认为),详情请见大神博文→_→:http://www.cnblogs.com/ggjucheng/archive/2011/12/13/2286391.html

指针学习小记