| 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)
{
//
这里是构造代码
} |
|
|