注册 登录  
 加关注

网易博客网站关停、迁移的公告:

将从2018年11月30日00:00起正式停止网易博客运营
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ideality

@linux c 编程@

 
 
 

日志

 
 
关于我

喜欢开源,愿意结识青岛使用开源的朋友,一起学习,工作。

网易考拉推荐
 
 

C中指针变量何时需要初始化malloc(转)  

2013-09-11 18:25:01|  分类: netfilter |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
首先你要明白什么是指针,指针是用来操作内存的。那么指针又如何操作内存呢?在C语言里可以定义指针变量,这个指针变量里可以存储内存的地址,一个32位的无符号整型值。它就像普通的int, double型变量一样。以下面为例说明:
int iMax = 1;
int * pMax = NULL;
我们定义了一个int型的变量iMax 和一个int型的指针变量pMax,并对他们进行了初始化。这里iMax的值为1; pMax的值为NULL,也就是一个无符号整形0。注意NULL是一个宏,代表0。现在pMax的值为NULL,一般来讲0也是一块内存地址, 我们也可以操作。注意这个NULL你现在认为他表示无效即可。用来给指针进行初始化。其它的先不用管。
现在我们来使用pMax, 如果要使用pMax, 那么就要对pMax赋值,使它指向一块内存。我们这里定义指针的类型为一个指向一个int型值的指针变量。所以可以将iMax的地址赋值给pMax。注意,不管什么样的类型的指针变量,其值都是一个unsigned int型的值,表示内存的地址。理解这一点很重要。为什么需要定义指针所指向的类型呢。如 char *, int * , double *型的指针,原因是我们使用指针是为了操作存储在内存中的特定类型的值。如果没有定义指针的类型,那我们在操作内存时,只能一个字节, 一个字节使用。这样的指针没有什么意义,也许你还不太理解。但多应用就能明白这一点。
现在我们来给pMax赋值,然后操作它.
pMax = &iMax;
好了,可以使用pMax了。就像使用iMax一样用它。不过你得在它前面加个指针运算符'*';
*pMax = *pMax + 2;
现在的pMax指针变量中存储的是iMax变量地址的值。对*pMax操作, 就是对iMax操作。现在*pMax = 3 , iMax = 3;
如果说我临时需要一块内存,这块内存用来存储n个int的变量。我就需要使用malloc为pMax分配一块内存。可以这样做:
pMax = malloc(sizeof(int) * n);
if (pMax == NULL) // 错误处理
{ TODO...}
这样我们就为pMax分配了一块内存大小为sizeof(int) *n 字节的内存。这里malloc返回一个指向这块内存的首地址并将它赋给了int型指针变量pMax.
好了,pMax已经可以使用了。我们需要对它进行初始化。这个可以使用memset函数
memset(pMax, 0 , sizeof(int) * n);
现在就可以像数组一样操作这块int型的内存了。
pMax[0] = iMax;
pMax[1] = iMax + 1;
pMax[2] = pMax[0];
...
总的来说,指针非常灵活。因为它可以直接操作内存。这就会使指针这个东西很不容易控制。
像你说的p = temp ;将数组的首地址赋值给p , 这样只是为了更容易操作字符串。temp也表示字符串的首地址, 但他是一个不可改变的量,即不能对temp赋值,它是只读的。指针p就不同了,他可以进行一些数学运算。
对一个程序来讲,如果你临时需要一块内存来存储数据,你可以使用malloc, 但记得要free。否则容易造成内存泄露
  评论这张
 
阅读(1253)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018