本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
 菜鸟一只,期望着变成大牛,慢慢来。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:ela'tech_blog
日志总数:4
评论数量:7
留言数量:-1
访问次数:41147
建立时间:2006年3月31日




[C/C++编程技术]指针学习笔记
读书笔记

ellx 发表于 2006/3/28 13:53:45

1.    注意函数的存活期为此函数块结束,其中的变量就会销毁,所以说要想让传到函数中的值能够改变,就要使得函数的变量为指针类型,这样的话函数变量所指的东西就是内存地址中存放的东西。同时对于指针进行动态负值。 错误程序如下所示: #include   int *pPointer;   void SomeFunction()   {    int nNumber;    nNumber = 25;    // 使pPointer指向nNumber:    pPointer = &nNumber;   }   void main()   {    SomeFunction(); // 让pPointer指向某些东西    // 为什么这样会失败?    printf("Value of *pPointer: %d\n", *pPointer);   }        修正程序如下所示:  #include   int *pPointer;   void SomeFunction()   {    // 使pPointer指向一个new的整数    pPointer = new int;    *pPointer = 25;   } void main()   {    SomeFunction(); // 让pPointer指向某些东西    printf("Value of *pPointer: %d\n", *pPointer); delete pPointer;   }  如果你不将内存delete掉,你的程序就会得到一个“内存泄漏”。如果出现了内存泄漏,那么除非你关闭应用程序,否则你将无法重新使用这段泄漏的内存。 2.    当一个指针指向类的时候不能用“.”来指向其中的变量而要用“->”,因为身并不包含一个变量;它指向的结构才包含这个m_Number。   3.      int *pArray;   int MyArray[6];   pArray = &MyArray[0];  请注意,你可以只写MyArray来代替&MyArray[0]。当然,这种方法只适用于数组,是C/C++语言的实现使然。通常出现的错误是写成了“pArray = &MyArray;”,这是不正确的。如果你这么写了,你会获得一个指向数组指针的指针,这种写法得到的并不是想要的东西。 4.如果你用new为一个数组分配空间的话,就像下面这个样子:   int *pArray;   pArray = new int[6];    那么必须这样释放它: delete[] pArray;  请注意delete之后的[]。这告知编译器它正在删除一个整个的数组,而不是单独的一个项目。必须在使用数组的时候使用这种方法,否则可能会获得一个内存泄漏。 5.不能delete掉那些没有用new分配的内存,像下面这个样子:   void main()   {    int number;    int *pNumber = number;    delete pNumber; // 错误:*pNumber不是用new分配的   }   6.使用free来释放由malloc分配的内存,用delete来释放由new分配的内存。 7.除了在声明中以外(例如int *number),星号应该读作“the memory location pointed to by(由……指向的内存位置)” “&”读作“the address of(……的地址)”,在声明的时候例外。在声明的这种情况下,它应该读作“a reference to(……的引用)” 如下:   int& Number = myOtherNumber;   Number = 25;    引用就像是myOtherNumber的指针一样,只不过它是自动解析地址的,所以它的行为就像是指针指向的实际值一样。与其等价的指针代码如下:   int* pNumber = &myOtherNumber;   *pNumber = 25;  8.指针和引用的另一个不同就是你不能更换引用的内容,也就是说你在声明之后就不能更换引用指向的内容了。例如,下面的代码会输出20:????????????????   int myFirstNumber = 25;   int mySecondNumber = 20;   int &myReference = myFirstNumber;   myReference = mySecondNumber;   printf("%d", myFristNumber);    9。当在类中的时候,引用的值必须由构造函数设置,像下面这种方法一样:   CMyClass::CMyClass(int &variable) : m_MyReferenceInCMyClass(variable)   {    // 这里是构造代码 }


阅读全文(1496) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.469 second(s), page refreshed 144793656 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号