随笔 - 2, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

2011年7月24日

关于指针初始化

1. 例子:
int i, arr[10], *p=arr;
分开来就是:
int i;
int arr[10];
int *p = arr;
 
这里int *p = arr; 相当于:
  
int *p;
p = arr;
 
也就是说赋值的时候*p只代表它是一个指针变量,而p=arr才是它的赋值语句.
 
初始化里面的*号表示这个变量是指针类型int *a,则a是(int *)类型,
不在初始化里,*a表示指向的内存单元里存的值


*p表示数组的第一个元素了,即arr[0];
01 int main()
02 {
03     int **p;
04     int a;
05       
06     *p = &a;
07       
08     printf("%x\n", p);
09 }
10 // 断错误
11   
12   
13 int main()
14 {
15     int *p;
16     int a;
17       
18     p = &a;
19       
20     printf("%x\n", p);
21 }
22 // 正常

 

 

这个也是我自己编程过程碰到的一个问题

 

01 int main()
02 {
03   int **p2;
04   int *p1;
05   p2=&p1; //p2 如果不指向一个确定的变量的话,直接 *p2 是一个危险的操作,你不知道指向了什么单元
06   
07   //后面的赋值写操作更危险了
08   
09   
10   int a;
11       
12   *p2 = &a;
13       
14   printf("%x\n", p1);
15   
16   return 0;
17 }

 

指针没有初始化,而直接对其赋值操作,危险
另外即使初始化也要初始化个有效的地址,否则也会出错

因为**p 是个二维指针,你写 *p = &a;
只是给*p初始化,但是没有给**p初始化,所以报错。
因为**p 是个二维指针要指向二维的变量

说白了就是 *p 指向一个内存,**p 指向另一个内存,
你只给*p 赋值,没有给**p赋值。
所以包没有初始化错误

posted @ 2011-07-24 15:34 grace| 编辑 收藏

在实际项目中应注意的事项

pInt是一个指针。当判断它指向的地址是否为空时应该写成:if(null==pInt)。
因为在实际项目的时候:
1.如果规范为pInt==null,有时就会出现pInt=null.这样差错十分难。
2.如果规范为null==pInt,有时就会出现null=pInt.这样差错就十分简单了。

posted @ 2011-07-24 10:50 grace| 编辑 收藏