free (p); p = NULL; [问题点数:40分,结帖人leleing]

Bbs1
本版专家分:0
结帖率 66.67%
Bbs2
本版专家分:154
Bbs9
本版专家分:67244
版主
Blank
红花 2013年8月 Linux/Unix社区大版内专家分月排行榜第一
2012年11月 Linux/Unix社区大版内专家分月排行榜第一
2012年10月 Linux/Unix社区大版内专家分月排行榜第一
2012年9月 Linux/Unix社区大版内专家分月排行榜第一
2012年7月 Linux/Unix社区大版内专家分月排行榜第一
2012年6月 Linux/Unix社区大版内专家分月排行榜第一
2012年5月 Linux/Unix社区大版内专家分月排行榜第一
2011年11月 Linux/Unix社区大版内专家分月排行榜第一
Blank
黄花 2013年6月 Linux/Unix社区大版内专家分月排行榜第二
2013年5月 Linux/Unix社区大版内专家分月排行榜第二
2013年3月 Linux/Unix社区大版内专家分月排行榜第二
2013年1月 Linux/Unix社区大版内专家分月排行榜第二
2012年12月 Linux/Unix社区大版内专家分月排行榜第二
2012年8月 Linux/Unix社区大版内专家分月排行榜第二
2011年12月 Linux/Unix社区大版内专家分月排行榜第二
2011年10月 C/C++大版内专家分月排行榜第二
2011年10月 Linux/Unix社区大版内专家分月排行榜第二
Blank
蓝花 2012年6月 C/C++大版内专家分月排行榜第三
2012年6月 PHP大版内专家分月排行榜第三
2012年5月 C/C++大版内专家分月排行榜第三
2012年3月 Linux/Unix社区大版内专家分月排行榜第三
2012年2月 Linux/Unix社区大版内专家分月排行榜第三
2011年11月 C/C++大版内专家分月排行榜第三
Bbs9
本版专家分:73203
Blank
红花 2012年10月 C/C++大版内专家分月排行榜第一
Blank
黄花 2014年2月 C/C++大版内专家分月排行榜第二
2013年4月 C/C++大版内专家分月排行榜第二
2013年3月 C/C++大版内专家分月排行榜第二
2012年12月 C/C++大版内专家分月排行榜第二
2012年11月 C/C++大版内专家分月排行榜第二
2012年8月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2014年12月 C/C++大版内专家分月排行榜第三
2014年5月 C/C++大版内专家分月排行榜第三
2014年3月 C/C++大版内专家分月排行榜第三
2013年12月 C/C++大版内专家分月排行榜第三
2013年10月 C/C++大版内专家分月排行榜第三
2013年9月 C/C++大版内专家分月排行榜第三
2013年7月 C/C++大版内专家分月排行榜第三
2013年5月 C/C++大版内专家分月排行榜第三
2013年2月 C/C++大版内专家分月排行榜第三
2013年1月 C/C++大版内专家分月排行榜第三
2012年9月 C/C++大版内专家分月排行榜第三
Bbs4
本版专家分:1110
Bbs1
本版专家分:26
Bbs8
本版专家分:32823
版主
Blank
红花 2013年11月 Linux/Unix社区大版内专家分月排行榜第一
2013年11月 专题开发/技术/项目大版内专家分月排行榜第一
2013年9月 C/C++大版内专家分月排行榜第一
2013年9月 专题开发/技术/项目大版内专家分月排行榜第一
2013年8月 C/C++大版内专家分月排行榜第一
Blank
黄花 2013年12月 C/C++大版内专家分月排行榜第二
2013年12月 Linux/Unix社区大版内专家分月排行榜第二
2013年11月 C/C++大版内专家分月排行榜第二
2013年10月 C/C++大版内专家分月排行榜第二
p=NULL;
int main()rnrnchar *p;rnp=NULL;rnprintf("Locate 0 :%d",p);rnreturn 0;rnrnrn执行这个程序就出错,是为什么啊rn
*p=NULL和p=NULL有什么区别?
请问*p=NULL和p=NULL有什么区别?
free(p);和_free_dbg(p, _CLIENT_BLOCK);区别?
void PASCAL CObject::operator delete(void* p)rnrn#ifdef _AFX_NO_DEBUG_CRTrn <em>free</em>(p);rn#elsern _<em>free</em>_dbg(p, _CLIENT_BLOCK);rn#endifrnrnrn_AFX_NO_DEBUG_CRT是什么宏命令? rn
p = q free(p)后 q是什么
[code=C/C++][/code]rn#include rnmain()rnrn int *p = (int *)malloc(sizeof(int));rn int *q = (int *)malloc(sizeof(int)); rn *p=123;rn q = p;rn printf("%d\n",*p);rn <em>free</em>(p);rn printf("%d\n",*q);rnrn
int *p=new int; free(p)
int *p=new intrn<em>free</em>(p)和delete p的效果有什么不同?
free(P)的含义
<em>free</em>之后void DeleteList(List L){    Position P,T;    P=L-&amp;gt;Next;    L-&amp;gt;Next=NULL;    while(P-&amp;gt;Next!=NULL)    {       T=P-&amp;gt;Next;       <em>free</em>(P);       P=T;            }    }这里的P还是指向那一块地址 只是你对那一...
#define __Free(p)
#define __Free(p) doif(p != NULL)<em>free</em>(p); p = NULL;while(0)rnrnrn#define __Free(p) if(p != NULL)<em>free</em>(p); p = NULL;rnrn这个两个有怎样的区别?
Point p为什么不能判断if (p==null)??????
结构类型好象都不能用==null来判断初始了没有。rnrn那我应该怎么判断一个结构类型是否已经初始化了?rn如:rnPoint p;rnif (某条件)rnrnp = new Point();rnp.x=10;rnp.y=20;rnrnrnif (p==null)//p==null这句一定会出错的,我应该怎么换了这句,但实现相同的功能?rnrn.....rn..rn.rn
请问p=NULL;delete p行么?
如提
如何封装delete[] p; p = null;
一般new动态分配内存之后,都要删除之,代码都一样;rndelete[] p; p = null;rn但总是这样写很麻烦,最好可以把这二句封装在一个函数中。但指针指向结构体千差万别,如何做啊?谢谢!rn
if (p) 和 if (NULL != p) 那个效率高些?
rt
p,*p,&p的区别
定义一个指针p:int *p; p:表示指向一个int型数据a的指针 *p:表示p指向的数据的值a &p:表示指针p的地址,&就是取地址符的意思 举个例子:房子A、B、a;A住着a,B住着A p表示A *p表示a &p表示B
p->next!=NULL与p!=NULL
各位前辈老师们:rnrnstruct person * del(struct person *h)rnrn struct person *p,*q;rn char temp[MAX];rn if(h==NULL)rn NULL;rn elsern rn p = h;rn puts("delete name is:");rn scanf("%s",temp);rn while([color=#FF0000]p->next!=NULL[/color]&&strcmp(p->name,temp)!=0)rn rn q =p ;rn p=p->next;rn rn if(strcmp(p->name,temp)==0)rn rn if(h==p)rn h = p->next;rn elsern q->next=p->next;rn rn elsern printf("列表中没有%s\n",temp);rn rn return h;rn rnrn这段代码里的红字部分。如果改成p!=NULLrn在链表中有删除的结点的情况下都是可以的。rn但是如果在链表中没用要删除的结点时候,就会出错。rn这是什么原因?rn
关于 int*p=NULL;
其实很简单一问题;rn就是rnint *p,*q=0;rnint a=3;rnp=&a;rn*q=*p;rnrnrn最后一行代码是错误;rn因为把指针赋值为0;不能对其解引用赋值;rn但是,那位能更深层次的讲解一下?rn感激不尽rn
Session.getDefaultInstance(p,null)的使用
在JMAIL 中,Session.getDefaultInstance(p,null)rnSession.getDefaultInstance(p,authenticator)rnSession.getInstance(p,null)rn这三个方法的区别!
if(ptr* p = getptr() != NULL)
if(ptr* p = getptr() != NULL)rn编译error:不能把bool型的值赋给ptr*;rnrn我记得这么写以前是可以通过的呀?rn我现在用的是vs2015。rnrn难道是我记错了?rn但就算以前也是编译通不过,rn但是这样的写法是肯定存在过的,这点我很肯定。rnrn有没有明白的大哥来给俺说说。
char *p=NULL的问题
char *p=NULL;rncout<<
*(++p)++ and *++++p
请问一下rn*++++p可以,而*(++p)++就不可以呢,rn他们的运算过程是怎么个样呢,不都是自右向左吗?rn另外,我在调试*(++p)++ 时,出错信息为:rnerror C2105: '++' needs l-valuern请问中的C2105代表了什么呢?
p与*p
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;string.h&amp;gt; int main(void){     char *p = NULL;     char buf[] = &quot;abc&quot;; //buf指向常量区“abc”,拷贝到栈区buf,编译器检测到是数组,地址0x11,//注意这里没有指向关系     print...
C 指针 *p &p p
int *p=new int(10);rncout<<
指针变量区分*p 、p、&p
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;malloc.h&amp;gt; typedef struct LNode { int data; struct LNode *next; }LNode,*List; int main() { LNode a; a.data=3; List r; LNode *p; p=&amp;amp;a; r=&amp;amp;...
int* p=malloc(100); p+=10; free(p);
rt
NULL在那定义的? 当listNode * p; p=NULL or p=0;时候 p还可以引用listNode内容吗
NULL在那定义的? 当listNode * p; p=NULL or p=0;时候 p还可以引用listNode内容吗
有请:int*p=NULL;(int*)p=(int*)p+1;和void*p=NULL;(char*)p=(char*)p+1两者执行不一样
[color=#FF0000]对于这个问题,刚才我回答错了,我思考的角度错了[/color]rnrn[code=C/C++]int main()rnrn int *p = NULL;rn (int *)p = (int *)p + 1; //通过rn void *pDest = NULL; //error C2106: '=' : left operand must be l-valuern (char *)pDest = (char *)pDest+1;rn return 0;rnrn[/code]rnrn这两句执行有差别,怎样个说法rnrn哪位来说说,记得以前飞雪说过关于左值的东西,蛮多的
*p和**p的区别
int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值 int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针) 例如: int i=10; //定义了一个整型变量 int *p=&i; //定义了一个指针指向这个变量 int **p1=&p; //定义了一个二级
关于 (*p)[] 和 *p[] 的问题?
(*p)[] 和 *p[]它们是一样的吗?如果不一样,那么它们的区别在哪里呢?
node *p=NULL 是什么意思
node *p=NULL 是什么意思额rnnode *p=NULL和p->link=NULL是什么关系?rnp->link=0和p->link=NULL是一回事吗?rnrn期末复习混乱了。。。
%#p
[code=C/C++]rn#includernint main()rnrn int a[5][5];rn int (*p)[4];rn p = a;rn printf("a_ptr=%#p,p_ptr=%#p\n",&a[4][2],&p[4][2]);rn printf("%p,%d\n",&p[4][2] - &a[4][2],&p[4][2] - &a[4][2]);rn return 0;rnrn[/code]rn%p是指针输出格式rn但是%#p的输出格式什么意思?
p
教你玩转HTML(html5)h5网页设计,网站开
指针函数*p()和(*p)()的理解......
我初学,对这个很迷茫
*p和p[0]歪打正着了
char *p=new char[10];中 *p和p[0] *(p+1)和p[1] 所指针地址和地址里面的值都是一样的。 char *p=new char(10);是将P这个地址里面的值值初始化为10; char *p=new char[10];  是声明一个是个元素的数组
char *p和char p[]
请指教下我rn我的理解是这样的:char *p=“abc”意思是使P指向常量abc,于是如果我们用*p="def"则会报错,因为常量不能修改rn如果是char p[]="abc"到话是把常量“abc”常量复制到数组p,这个时候p指向的是变量的空间,于是*p='d',*(p+1)='e',*(p+2)='f'rn请问大家,我这样理解正确吗?谢谢大家!
*p = 5; cout<<
#include "Stdio.h"rn#include rnint main(void)rnrn int *p=0;rn *p = 5;rn cout<<>a; rn return 0;rnrn在VC++ 6.0 中出现内存错误,这是为什么?
p()和(*p)()的区别?
定义一个函数指针p指向函数f,rnrn 那么p()和(*p)()结果是一样的。rnrn 他们的区别在哪?rnrn 另外函数指针和函数名有什么区别?rnrn 函数指针和其他指针有什么具体区别?rnrn rnrn
&*p
char str[6] = "hello";rn char *cp=str;rnrn cout<<
C语言*p、p以及&p的区别
前言: 先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。 上面就段理解了,*p和p的区别就不难解释了。 p是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“*”是解引用操作符,你可以把它理解成打开盒子,*p就是打开p号盒子,取出里面的数据。 简单来说,你记住,p存放的是地址,而*p是让程序去那个地址取出数据。总结
辨析*P++,*(p++),*(++p),++(*p),*(P--),*(--P)
1,*p++由于++和*同等优先级,结合方向为自右向左,因此它等价与*(p++)。先引用p的值,实现*p的运算,然后再使p自增1。2,*(p++)与*(++P)前者是先取*p的值,然后使p加1。后者是先使p加1,再取*p 。若p的初值为&amp;amp;a[0],输出*(P++),得到a[0]的值。输出*(++p),得到a[1]的值3,++(*P)表示p所指的元素加1,如果p = a , 则++(*p)相...
P + 1 == *(P + 1) ?
一点小问题,大家看看:rnvoid call_array_pointer() rn int (*p)[10]; //one pointer which pointers to an arrayrn int b[][10] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13; rn p = b;rn printf("%d, %d\n", p, b);rn printf("%d, %d\n", p + 1, b + 1);rn printf("%d, %d\n", *(p + 1), *(b + 1));rnrnrnint main() rn call_array_pointer();rn system("pause");rn return 0;rnrn有点不解的是:p + 1的值等于*(p + 1), b + 1 的值也等于*(b + 1), 有点糊涂了
p[]与*p的区别
看到一个问题rnchar *strA()rnrn char p[] = "Hello word";rn return p;rnrnrnchar *strA()rnrn char *p = "Hello word";rn return p;rnrnrn这两个说下面的p为全局变量,为什么?
*p 与p[] 指向的内存
本人初学c语言发现这样一个问题:rn char *getMemory1()rn char *p="abc";rn return p;rnrnchar *getMemory2()rn char p[]="abc";rn return p;rnrnvoid main()rn char *p1=NULL;rn p1=getMemory1();rn printf(p1);rn rn char *p2=NULL;rn p2=getMemory2();rn printf(p2);rnrn能够打印出p1 ,但是打印不出p2,这是怎么回事?求指导
* p
《C语言程序设计 现代方法》n第12章 指针和数组nn12.2 指针用于数组处理n*++p或*(++p)nn先自增p,自增后表达式的值是*pn—————————n书上这句话是什么意思?n实例:nint j=1,*p
*p++,(*p)++,*++p,++*p有什么不同??
*p++#include #include #includevoid main() { int str[]={1,2,3,4,5}; int *p=str; //*p++; printf("%x\n",p); printf("%d\n",*p++); printf("%x\n",p); pr
思​科​ ​P​P​P​ ​配​置
1.掌握PPP 的基本配置步骤和方法。 2.掌握PAP、CHAP 的基本配置步骤和方法。 3.掌握对PAP、CHAP进行诊断的基本方法 1.配置路由器之间的PPP 连接。 2.配置、验证PAP过程。 3.配置、验证CHAP过程。
请教int *p=0 与 int *p=NULL 的区别?
请教int *p=0 与 int *p=NULL 的区别?
if(p==NULL)和if(!*p)作用相同还是相反?求解释
char *p;那么if(p==NULL)和if(!*p)作用相同还是相反?我觉得是相反的,但好像是相同的,求解释?
delete p 是删去p指针,还是它指到的内容,*p。还是删去什么?free(p) 呢?
同上rn
while(p)与while(*p)的区别
p=首个数据节点指针 while(p) { //操作 p=p-&amp;gt;next; } while(p) 等价于while(p !=0) 检查的是p值是不是0,或者是不是空指针,如果是,则跳出循环,不再继续循环体 而while(*p) 相当于while( *p != 0) 检查的是p所指向的地址中的数据是否为0,但前提是p不能为NULL...
传p还是传*p
刚学指针那会儿, 没太搞明白p和*p的区别, 后来搞清楚后, 发现这个东西确实是太简单了。       在实际生活中, 有很多类似的例子:       某某某是收藏某片的高手, 收藏了很多很多, 大家都找他要资源, 他怎么提供资源呢? 有两种思路:       1. 分别把资源传给每个人, 也就是提供*p       2. 建立一个资源共享区, 提供p, 大家根据这个p(在本例中指url)
请教数据结构p—>top=p
请教一个问题:关于栈p—>top=p中top是什么,p又是什么,怎么能两个指针放一块呢?p—>next=p和p=p—>next怎么区分呢,是一个意思吗?本人菜鸟,刚学数据结构,望高人指点!
**p和二维数组p有没有区别?
**p和二维数组p有没有区别?
指针p跟*p的区别
代码如下:rn#include rnvoid invert(char *a,int x,int y)rn char t,*p, *q;rn p=a+x;rn cout<<
INT *P; SIZEOF(P)是多少?
WIN32是32位的地址吗?
搜 索 p 2 p
搜 索 p 2 p
div p和div>p的区别
## 代码段落 &amp;lt;style&amp;gt; div span{color:red;} &amp;lt;/style&amp;gt; &amp;lt;div&amp;gt; &amp;lt;p&amp;gt; &amp;lt;span&amp;gt; Hello World! &amp;lt;/span&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;span&amp;gt; Study Css &amp;lt;/span&amp;gt;
pkzip -p与-P到底有什么区别?
如果需要pkzip软件我提供,可以通过msn传送rnliuhequan_love@hotmail.comrn实在着急,请给位帮忙。rn最好提供可操作的例子,谢谢
请教*P和P[0]的区别?
一个数组,比如int P[10]rn如果当作传递参数时,*P和P[0]有啥区别?rn实参、形参的区别?rn比如rnvoid Func(int *P)rnvoid Func(int P[0])
我的P 2 P聊天工具
P 2 P聊天工具项目
标签字体水平垂直居中
html中p标签字体居中的方法。首先p标签给出宽和高,呈块状显示,水平居中属性text-align: center;垂直居中line-height: px;这里的line-height值和你给p标签的高度值是同一个值。 系
函数中的*p、p[]的区别
#include &amp;lt;stdio.h&amp;gt; char *test() { char *p = &quot;hello world&quot;; return p; } int main() { char *p = test(); printf(&quot;%s\n&quot;, p); return 0; } 输出:hello world   #include &amp;lt;stdio.h&amp;gt; char...
*p[4]与(*p)[4]的迷惑;
最近一直在学着理解指针与数组名rn但还总是搞混;rn例如让一个指针指向一个二维数组rnint a[3][4];rnint (*p)[4]=a;/*这个是定义的一个一维数组,怎么指向一个二维数组的呢*/rnint *p[4];/*这个是书上的指向数组的指针,这个应该怎么实现呢?*/
char *p[]和 char p[][]的问题
int main()rnrn char *p[20];rn char q[10][20];rn //p[0][0] = 'a';这个赋值语句运行时报错rn p[0] = "ok";rn q[0][0] = 'b';rn return 0;rn
指针p, 能否直接访问*p
定义rnint *p;rn*p = 10; //能否不指定p的指向而直接给*p赋值?rnrn书上好像可以, 用c-<em>free</em>测试也可以, 可是我以前好像记得不能这样, 是我记错了吗? 谁用vs试试(我没装)? 或高手指教下?
int *p[] 与int (*p)[] 问题
有int (*p)[3] 和int *p[3];rnrn怎么对int (*p)[3],分配新的空间,用new rn我知道这是个指针可以指向类似 int array[][3];rn还有int *p[3] 怎么分配新的空间rn我道对于int *p[3] 可以rnfor(int i=0;i<3;i++)rnrnp[i]=new int;rn来分配rn但有没有一种方法是可以一句话就可以分配成功的,比如p =new int ??? 我试了多次都没有成功,rn求达人帮助.
char* p 与char p[] 的区别?
char* p = "Hello Linux!";rn与rnchar p[] = "Hello Linux!";rn的区别是?rnrn是不是char* p = "Hello Linux!";相当于const char p[] = "Hello Linux!"; ???
关于free(p)函数用法!~高手请近来
typedef struct numberrn rn int i;rn struct number *next;rn str;rn#include rnvoid main()rnrn str *p,*p1,*front,*rear,*p2;rn int n=0;rn p=(str *)malloc(sizeof(str));rn scanf("%d",&p->i);rn while(p->i!=0)rn rn n++;rn if(n==1)rn front=rear=p;rn elsern rn p1->next=p;rear=p;rn p1=p;rn p=(str *)malloc(sizeof(str));rn scanf("%d",&p->i);rn rn p2=p;rn <em>free</em>(p);rn p1->next=NULL;rnwhile(front)rnrn printf("%d",front->i);rn front=front->next;rn rn printf("\n%d",p->i);rn printf("\n%d",p2->i);rn printf("\n%d",rear->i);rn rn这个是我写的队列程序~输入数字动态开辟空间rn当输入到0~停止输入~rn这个时候我释放拉p所指向的接点rn然后在释放之间我执行这语句p2=p,rn应该释放以后空间被解放可以被别的程序应用rn但是我输出p->i和p2->i既然有值这是为什么,请高手帮我解答~
f (p == NULL), if (p == 0) 还是 if(p) ?----再论空指针检测问题
某些C/C++编程的书中,曾经提到如何判断指针是否为空的问题.很显然,if (p == NULL), if (p == 0) 和if(p),都能够完成这一任务,差别在于可读性方面.我们分别加以讨论.rnrn1. if (p == NULL)rn相当多的文章建议采用,他们中的部分人甚至认为,其他做法都是错误的.这个形式一个变种是 if (NULL == p),虽然略显怪异,但是,万一我们误将==写成了=,编译器通常都会给出编译错误,从而防止键入的错误.拥护这一方案的人认为,NULL可以明确地表达出p 是一个指针,而不是整数或其他什么东西.有助于我们理解代码.然而,反对者也众多,包括C++之父B.S.反对的主要根据是,NULL并不是语言的一部分,通常,它是由一个宏定义而来的:rn#define NULL ((void*)0)rn一般来说,NULL其实可以工作的很好,但是,宏的出身,让它不让人喜欢.另外,它也确实有些现实的问题,典型的,成员指针的问题.假设有类型A,rntypedef void (A::*FUNT)();rn现在,FUNT定义成一个成员函数指针类型了.假设有FUNT fun = ...rn对于if (fun == NULL)将会导致编译失败.原因在于FUNT和void*之间不存在类型转换.不仅仅成员函数存在这个问题,普通函数指针也可能存在这个问题.rn那么,我们改变NULL的定义呢?尝试这样定义:rn#define NULL (0)rn或者rn#define NULL 0rn这也可能存在问题.NULL这个名字意味着自己是个指针,只允许指针和NULL比较,然而事实上却并非如此.这有欺骗的嫌疑.许多人认为,欺骗不可接受,暴露问题比欺骗要好得多.这种欺骗导致编译器无法提供恰当的帮助.rnrn2. if (p == 0)rn包括B.S在内的许多人也推荐这种方式----尽管他们大多认为这个方案并不完美.首先,语言内部对于常量0有特殊的处理,因此,第一种选择中可能遇到的和函数或成员函数指针比较失败的问题可以解决.另一方面,它没有强调自己必须和指针比较,因此,也不存在欺骗.而且,因为这种方式受语言支持,每个C++ 程序员都会熟悉这一方法,而不会觉得难以理解.并且,一个新的语言改进正在进行,会为语言提供一个nullptr的关键字,专门用来和各种指针比较.但目前的语言实现基本上还不支持这一特性.rnrn3.if (p)rn许多C++的铁杆或资深用户对前两个方案嗤之以鼻.他们认为这个方案正确,简单,有效. 另外,这一方案可以有效地应用到所谓smart_ptr上去.而1和2方案往往会带来潜在的不安全因素.假设,我们现在有一个smart_ptr类,为了支持第一种语法,我们需要为之定义一个全局的比较函数.但是,这也意味着要提供一系列长相难看(参数类型不对称)的重载,而且,需要花费很多精力.并且,难以提供一个完全一致的实现.rnrn我们看一下,为了支持smart_ptr,不同方案分别需要做些什么.rn为方案1,我们要定义:rnbool operatro ==( const type& L, void* null);rnbool operatro ==( void* null, const type& R);rn同样,还需要重载operator !=;rn这里的问题是,smart_ptr我们本来不指望和任何void指针比较相等的,但是现在不得不允许了.也就是说,我们可以和一个非NULL的void指针比较了.而我们的本意是:查询这个指针是不是空.rn方案2存在同样的问题,而且更严重.我们可能和任意整数比较了.而对于普通的指针,和非0常量比较会编译失败的.rn另一个手段,借助于隐式转换,但是那更加不安全.rn在第三个方案中,我们通常会重载operator ! 和operator bool.虽然重载operator bool也是危险的,但是现在技术上可以绕过这一点,就是重载一个unspecified_boolean的办法,类似实现如下:rntemplatern class unspecified_boolean_imprn rn struct Tester void dummy() ;rn typedef void (Tester::*unspecified_boolean_type)(); rn public:rn operator unspecified_boolean_type() const THROW0() rn return static_cast(*this).operator!() ? 0 : &Tester::dummy;rn rn protected:rn unspecified_boolean_imp()rn ~unspecified_boolean_imp();rn ;rnrn这样,我们可以安全使用if (p)的语法而不必担心被误用.rn第三个方案常见于GP代码.然而,拥护1,2方案的人往往反对,认为3不利于阅读,过于技巧化.而3的拥护者认为,3明显是一种更务实有效的做法,可以使得实现简单明了,而且牢靠.rn那么回顾一下我们的意图:查询指针是不是空.那么为什么不提供一个查询的函数呢?把差异封装掉不是很好?rn于是作下述尝试:rnif (is_nullptr(p));rn嗯,我觉得这样的代码比if (p == NULL)更加直白.如果is_nullptr定义成宏,可以这样提供:rn#define IS_NULLPTR(x) ((x) == 0)rn可是,我不喜欢宏,而且,我觉得,宏能够帮我做的事情太少,例如,如果p是一个int,编译器无声无息地成功.我觉得,很明显地is_nullptr对于非指针类型应该给个编译错误.事情落到了template头上:rntemplate bool is_nullptr(T* p)rn return !p;rnrn现在,我可以安心地写if (is_nullptr(p))了,如果p是int类型,会编译出错.但是,还有两个问题没有解决.一个是smart_ptr,另一个是成员函数指针. smart_ptr其实很简单,重载就是了rntemplaternbool is_nullptr(const smart_ptr& p) return !p;rn借助于traits技术来维护concept,事实上,可以做得更好,我们只需要一行额外代码,在smart_ptr的定义中加入:rnenum is_pointer = 1;rn就足矣.即使我们无法修改smart_ptr,我们仍然有后路,不是吗?如果第三方的smart_ptr不支持if (p)这样的语法,但是,通过重载is_nullptr,我们可以为所有的可能提供唯一的使用形式.我喜欢这种简单性.rn函数指针不需要我们做特别的处理就已经支持了.现在处理成员函数指针:rntemplaternbool is_nullptr( T U::* x)rnrn return !x;rnrn幸运的是,它可以工作.无论是针对成员函数还是成员数据.而且,也无视函数的参数列表.曾经在实现变长template参数地狱中幸存的人们,是不是觉得世界太不公平了?^_^rn对于函数,这里的T不仅仅是返回值,实际上是一个函数定义.不过,我不确定这是否确实符合ISO标准.不过没关系,大不了重回地狱,I will be back!rn你可以批评我的巴洛克倾向,我要开始享受静态类型安全的is_nullptr了.
请大家讨论一下:if(p) delete p;p=NULL,这个判断有没有必要?
if(p) delete p;p=NULL;真的可以避免程序崩溃吗?rn曾经有文章说"删除一个已经删除的指针,会出现程序崩溃,是不允许的,删除一个空指针则是可以的",那么就是说这样一段代码:rnint *p=new int(5);rndelete p;//如果执行了这段代码,把地址空间p(4个字节,windows系统)的内容释放,p还是有值的.rn下面再有一句:rnif(p) //p!=0,这时肯定不为0rndelete p;//错误,这个程序肯定会挂rnp=NULL;rn这样程序一样会崩溃,一样会出现问题。所以我说这个判断好像没有什么必要吧。rn我的想法是程序员应该做的事就是如果你delete pointer,一定要让pointer=NULL,这样写一个代码,rn大家一般都是这么写的吧.rn如果都能保证这样写的话,这个if(pointer)好像就是形同虚设了吧。rn
p是一指针,那么if(p==0)和if(p==NULL)是等价的吗?
如题。
理解指针,*p,p=&c
char c='a',*p; 变量c的类型是char,它的初始值为'a'。变量p是个char类型的指针。 p=&c; 符号“&”是取地址操作符。表达式&c的值就是变量c在内存中的地址。c的地址被赋值给p。我们可以看成是p指向c。 printf("%c,%c",*p,*p+1); 格式‘“%c”用于把表达式按照字符的形式进行打印。符号“*”表示间接访问操作符。表达式*p的值就是p所指向的对
char *p 与 char p[] 的区别??
[code=C/C++]rn#include rnrn#include rnrnvoid main()rnrn char *p = "abcd"; //??程序在运行到 *(p+1) = 'a'; 时候出现内存读写错误。rn char p[] = "abcd"; //换成这种写法,程序可以正常运行。rnrn printf("*(p+1) = %c\n", *(p+1));rn *(p+1) = 'a';rn printf("*(p+1) = %c\n", *(p+1));rnrn return;rnrn//等待高手解答疑问????谢谢rnrn[/code]
&*p 和 p有什么分别?
比如说有这样的函数:rnrnFn(T *t);rnrnT *t;rnrn那么以下2种写法的分别在那里?rnrnFn(t);rnrnFn(&*t);rnrn看一些大师的书,都是第2种写法,???rnrn
指针p与*p有区别?
[code=C/C++] #include rnusing namespace std;rnint main()rnrn int *p=new int;rn *p=3; //我为什么改成p=3 就出错了?rn cout<<
char p[]与char *p的区别
有人能给我讲讲rnchar p[5] = "abcd";rn与rnchar *p = "abcd"rn的区别么?rnrn为什么char *p = "abcd"是常量字符串?
函数指针的问题,p()与(*p)()一样?
[code=C/C++]rn#include"stdio.h"rnint sum(int x,int y)rnrn return x+y;rnrnrnvoid main(void)rnrn int S1=10,rn S2,rn *p_int;rnrn int (*p)();rnrn p_int=&S1;rn// printf("S1=%d,*S1=%d\n",S1,*S1);rn printf("p_int=%d,*p_int=%d\n",p_int,*p_int); //p_int与*p_int不同rnrn p=sum;rn printf("sum=%d,*sum=%d,p=%d,*p=%d\n",sum,*sum,p,*p); //这里为什么p与*p的值一样rn S1=(*p)(10,20);rn S2=p(30,40);rn printf("(*p)(10,20)=%d\np(30,40)=%d\n",S1,S2);rnrn[/code]rnrn这段程序打印出来的结果,p_int与*p_int的值不一样可以理解,为什么p与*p,sum与*sum的值一样,加*了不是要取值吗?rn
char *p to unsigned char *p
char *p to unsigned char *p
delete [] p 与 delete p的区别??
小弟,才疏学浅有下面的问题请大家执教??3x!!rnrnchar * p = new p[bufsize];rnif(p != NULL)rnrndelete[] p ; //如果这句话变为delete p ;会有什么区别???rnp = NULL;rnrnrn
struct node *p 和node *p
假设在程序中有如下定义:rnrnstruct node()rnrnint v;rnnode *next;rnNODE;rnrn在使用这一结构体的时候,书上都说要这样声明:rnstruct node *p;rn或rnNODE *p;rnrnrn而我在程序中一直用rnnode *p;rn这也被正确编译了。rnrn它们有区别吗?rnrn
free -m")问题,不吝赐教">Process p = rt.exec("free -m")问题,不吝赐教
Java代码 rnpublic static double[] getMemUsage() throws Exception rn rn double[] result = new double[4]; rn rn Process p = rt.exec("<em>free</em> -m");// 调用系统的命令 rn rn BufferedReader in = null; rn try rn in = new BufferedReader(new InputStreamReader(p.getInputStream())); rn String str = null; rn String[] strArray = null; rn rn while ((str = in.readLine()) != null) rn rnrnpublic static double[] getMemUsage() throws Exception rnrn double[] result = new double[4];rn rn Process p = rt.exec("<em>free</em> -m");// 调用系统的命令rn rn BufferedReader in = null;rn try rn in = new BufferedReader(new InputStreamReader(p.getInputStream()));rn String str = null;rn String[] strArray = null;rnrn while ((str = in.readLine()) != null) rn Java代码 rn int m = 0; rn rn if (str.indexOf("/") != -1) // MemUsed rn strArray = str.split(" "); rn for (String tmp : strArray) rn if (tmp.trim().length() == 0) rn continue; rn rn if (++m == 3) rn result[1] = Double.parseDouble(tmp); rn rn rn rn rn rn if (str.indexOf("Mem") != -1) // MemTotal rn rn strArray = str.split(" "); rn for (String tmp : strArray) rn if (tmp.trim().length() == 0) rn continue; rn rn if (++m == 2) rn rn result[0] = Double.parseDouble(tmp); rn rn rn rn rn rn rn p.getErrorStream(); rn catch (Exception e) rn e.printStackTrace(); rn finally rn in.close(); rn p.destroy(); rn rn// System.out.println("Performance Monitoring menUsed:" + result[1]); rnreturn result; rnrn在一个线程(假设1毫秒一次)中,无限循环执行上面的代码:rnrn rnrn 大概20分钟左右后出现如下异常:rnrn rnrnjava.io.IOException: Cannot run program "<em>free</em>": java.io.IOException: error=24, Too many open filesrn at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)rn at java.lang.Runtime.exec(Runtime.java:593)rn at java.lang.Runtime.exec(Runtime.java:431)rn at java.lang.Runtime.exec(Runtime.java:328)rn at LinuxSystemTool.getMemUsage(LinuxSystemTool.java:98)rn at LinuxSystemTool.exec(LinuxSystemTool.java:67)rn at LinuxSystemTool.run(LinuxSystemTool.java:42)rn at java.lang.Thread.run(Thread.java:619)rnCaused by: java.io.IOException: java.io.IOException: error=24, Too many open filesrn at java.lang.UNIXProcess.(UNIXProcess.java:148)rn at java.lang.ProcessImpl.start(ProcessImpl.java:65)rn at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)rn ... 7 morernrn rnrn查看网络相关资料,大概了解可能是由于打开的句柄过多造成,也没有找到解决办法,不吝赐教,谢谢rnn[b]问题补充:[/b]n如何清除getInputStream??请详细说明,谢谢n[b]问题补充:[/b]n Process p = rt.exec("<em>free</em> -m");// 调用系统的命令 rn大概循环执行1000次左右,就挂掉了,出现上述错误rnrn原因可能是执行<em>free</em> -m,打开的缓存IO文件过多,如何释放??rnrn已经试过的办法:rn finally rn in.close(); rn p.destroy(); rn rn都不起作用,各位大侠分析分析,不胜感谢。n[b]问题补充:[/b]n首先,非常感谢lewhwa的热情帮助。rnrn你提供代码和方法我也做过测试,问题依旧,各个流我分别关闭,循环执行1000rnrn次左右还是出现同样的问题。rn
nodetype *p=new nodetype(3); 那delete p后p是否一定是NULL(0)呢?
nodetype *p=new nodetype(3); 那delete p后p是否一定是NULL(0)呢?
int **p,*i; i=NULL; p=&i; 请问p的值是多少?
-
char *p=new char[n],char *p,char p[]
char *p=new char[10];rnp="hello";rn为什么在程序之后就不能对p进行更改了,char p[]="hello";可以
K M P 算 法 . p p t
kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法kMp算法
p=for (p=s;*p!='\0';p++);有这样赋值的吗?
char *s="hello"rnchar *p;rnp=for (p=s;*p!='\0';p++);rn谁见过这样的赋值语句,编译也通不过呀!!
【C语言】对指针p ,*p ,**p 的认知
因为对指针的用法不熟,我和同学讨论并尝试验证各自对指针的理解。 讨论和验证过程中,有一点比较重要的是要抓住   *p 意思,[   *  ]和[   p  ]怎么去用。 我们先定义一下几个整型变量,用于观察地址以及变量内容的变化。 int a=11,b=22,c=33; int **p; 再分别通过几条语句验证: p=&b; //指针p将指向b上的内容; *
【c语言】*p++、*++p、(*p)++、++*p 的区别学习
为了清晰明了,我们每次都使p指向数组的首地址。 (1)*p++ int b = *p++;//等价于a = *(p++); 即a = *p; p = p + 1; 执行上面语句,输出b=10 执行语句*p++;后,*p=20; (2)*++p int d = *++p;//等价于 p =p+1; d=*p; *和++的优先级相同,但根据它们的右结合性可知,先p=p+1;后d...
C语言基础知识:*p++与*++p;(*p)++  与 ++(*p)的理解
首先查看C语言运算符优先级表,可以看到++和指针的*号运算优先级都是第二级。结合方向都是“右到左” *p++:等同于:*p;  p += 1; 解析:由于*和++的运算优先级一样,且是右结合。故*p++相当于*(p++),p先与++结合,然后p++整体再与*结合。前面陈述是一种最常见的错误,很多初学者也是这么理解的。但是,因为++后置的时候,本身含义就是先运算后增加1(运算指的是p...
int a,*p;p=&a;*p=1;内存做了几件事
如题,我先说自己的理解,欢迎补充和指正rn1。内存栈上给变量a,p各一个地址,长度为4rn2.P对应的地址的内容上存有a地址。rn3.把1赋值给*p对应的物理地址上的单元。
$p = $p == '' ? "1" : $p;这样定义变量有什么问题?
为什么我在公司的运行就没问题,拷到自己电脑上,因为我的&p用作页数值,所以我每个功能都在$p第一个报错。
p+strlen(p)与p(strlen(p))意义相同的吗??
其中p是指针
区分int *p,int *p[],int(*p)[]及其初始化
一:正确赋值 int(*p) = (int*)malloc(15 * sizeof(int*)); 二:错误赋值 int *p=0; 三: int *p[15]; 四: 四:
int **p=0; p能访问,*p为什么不能访问?
int **p=0; p能访问,*p为什么不能访问?
int *p=new int;*p=5;delete p;指针问题
int *p=new int;rn*p=5;rndelete p;rn请问以上只是把p指针的内容释放了导致p成为了野指针,rn还是把p指针以及它所指向的内容也都删除了,以后这个程序中就没有p指针了
Packt.Publishing.Seam.2.x.Web.Development.Apr.2009下载
此教程从基础讲述了使用Seam的开发过程,是一本很好的入门英文教程,英文内容也比较简单 相关下载链接:[url=//download.csdn.net/download/jason9157zb/2002494?utm_source=bbsseo]//download.csdn.net/download/jason9157zb/2002494?utm_source=bbsseo[/url]
根治Windows 2003操作系统登录及关机麻烦下载
根治Windows 2003操作系统登录及关机麻烦 让Windows 2003操作系统登录及关机随心所欲的办法 相关下载链接:[url=//download.csdn.net/download/xisiamk/2315210?utm_source=bbsseo]//download.csdn.net/download/xisiamk/2315210?utm_source=bbsseo[/url]
Effective.STL.zh-cn下载
Effective.STL关于C++的开发,STL模版应用,STL模版应用,STL模版应用,STL模版应用 相关下载链接:[url=//download.csdn.net/download/shellrose/3564234?utm_source=bbsseo]//download.csdn.net/download/shellrose/3564234?utm_source=bbsseo[/url]
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo
我们是很有底线的