1初识指针:
(1)指针是一个变量, 存储的是变量的内存地址。首先我们熟悉一下常规变量的地址。
int main()
{
int dounts = 6;
double cups = 4.5;
cout << dounts<<endl;
cout << cups << endl;
cout << &dounts<<endl; //&是一个取地址符
cout <<&cups << endl;
system("pause");
}
6
4.5
008FFD68
008FFD58
请按任意键继续. . .
发现两个变量地址相距16字节,可能是操作系统将两个变量没放在相邻的单元。
(2)前面抛砖引玉,下面来看看指针的原理:c++中声明数组,必须指定数组的长度因此数组长度在编译时就指定好了,这样程序在大多情况下都浪费了内存。OOP通过将这样的决策推迟到运行阶段进行,使程序更灵活。c++采用的方法是使用关键字new请求正确数量的内存以及使用指针来跟踪分配的内存的位置。
int main()
{
int higgends = 6;
int *pt = &higgends; //声明一个指针变量并把higgens变量地址给pt
cout << "higgends=" << higgends<<endl;
cout << "address of higgend=" << &higgends<<endl;
cout << "value of *pt=" << *pt<<endl;
cout << "value of pt=" << pt<<endl;//指针的值即为所指向变量的地址
system("pause");
}
higgends=6
address of higgend=0102F79C
value of *pt=6
value of pt=0102F79C
(3)声明和初始化指针:
int main()
{
int higgends = 6;
int *pt = &higgends; //声明一个指针变量并把higgens变量地址给pt
cout << "higgends=" << higgends;
cout << "address of higgend=" << &higgends;
cout << "value of *pt=" << *pt;
cout << "value of pt=" << pt;//指针的值即为所指向变量的地址
system("pause");
}
higgends=6
address of higgend=005DF710
value of *pt=6
value of pt=005DF710
请按任意键继续. . .
(4)指针的危险:野指针
c++创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储所指向数据的内存。
比如下面的232323并不知道在哪里,那fellow并没有被初始化,这个指针就叫野指针。
long *fellow;
*fellow = 232323;
(5)new来分配内存:
指针真正的用武之地是在程序运行阶段分配未命名的内存以存储值。
int main()
{
int *pn = new int; //pt指向一个int型数据
typename *pointername = new typename; //指针可以指向任何类型数据
}
(6)delete来释放内存:
int *pn = new int;
delete pn;
(7)new来创建动态数组:
int *pn = new int[10];
(8)关于数组与字符串的指针:
int main()
{
short tell[10] = {1,2,3,4,5,6,7,8,9,4};
cout << tell<<endl;
cout << &tell<<endl;
char flower[10] = "rose";
cout << flower;
system("pause");
}
004FFB58
004FFB58
rose请按任意键继续. . .
. .