首页 > 其他 > 详细

2015.8.5关于指针的个人理解

时间:2015-08-06 12:37:06      阅读:75      评论:0      收藏:0      [点我收藏+]

1、要区分指针的类型指针所指向的类型

1.1指针的类型:把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。

eg:   int *a;去掉‘a’,得到“int *”,所以该指针的类型就是int *,即该指针是一个指向整型变量的指针;

       char *str;去掉“str”,得到"char *",所以该指针的类型就是char *,即该指针是一个指向char型变量的指针;

       int **ptr;去掉“ptr”,得到“int **”,故改指针的类型就是“int **,即该指针是一个指向整型指针变量的指针”

       int (*ptr)[3];去掉“ptr”,得到“int(*)[3]”,故改指针的类型就是int(*)[3],即该指针是一个指向整型数组的指针。

1.2指针所指向的类型:把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

eg:int *a;去掉‘a’和‘*’,得到“int”,故该指针所指向的类型是int型;

      char *str;去掉“str”和‘*’,得到“char”,故该指正指向的类型是char型;

      int **ptr;去掉“ptr”和‘*’,得到“int *”,故该指针指向的类型是int *型;

      int (*ptr)[3];去掉“ptr”和‘*’,得到int [3],故该指针指向的是int [3]型。

 

2、要理解‘*’在不同场合的不同意义

1 void main()
2 {
3 int *a;
4 int b=10;
5 
6 a=&b;
7 
8 printf(”%d“,*a);
9 }

 

第3行int *a(定义的时候)‘*’只是表示此时定义的这个变量是指针变量

第8行中的*a,其中的‘*’表示”指向“,”*a“表示指针变量a所指向的变量,也就是b

 

3、不能给野指针瞎赋值

eg:

1 void swap(int *a,int *b)
2 {
3 int *temp;
4 *temp=*p1;
5 *p1=*p2;
6 *p2=*temp;
7 }

第3行定义了一个指向整型变量的指针temp,接下来在第4行就给*temp赋值。这是错误的。

因为*temp是指针temp所指向的变量,但是由于未给temp赋值,所以temp并没有确定的值,所以temp所指向的内存单元也就是不可预见的。那么对*temp赋值就是向一个未知的存储单元赋值,但是这个未知的存储单元有可能是一个存放着重要数据的单元,这样就会造成系统运行错误。

 

2015.8.5关于指针的个人理解

原文:http://www.cnblogs.com/wan0807/p/4707420.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!