指针
2013-04-07 19:09 Keiven_LY 阅读(210) 评论(0) 编辑 收藏 举报摘要:
程序中定义的某个变量,在编译时系统就会给这个变量分配内存单元,并根据程序中定义的变量类型分配一定长度的内存空间,每个内存单元中存放着变量的值。
为了便于内存单元的存取,系统为每个内存单元分配了一个地址,则程序中定义指向“地址”的变量即为指针变量,简称为:指针。
指针是一类特殊的变量,它保存的不是数据值,而是程序中定义的某个变量(整型,实型变量)在内存中的地址。
指针的定义:
int *p1;
float *p2;
char *p3;
void *p4(这里定义一个空指针,可以指向任何对象,也称为通用指针)
指针的初始化:
(1)指针对象可以被一个具有相同类型的对象初始化,如:
int i=10;
int *p=&i; (这里p定义的是整型指针,而i为整型变量,符号&为取地址符,它所得为后面跟的变量的内存地址)
(2)同类型的指针之间相互赋值,如:
int *p1=p; (这里的p是上面定义的指向整型变量i的指针,故p1也是指向整型变量i)
(3)通过关键字new直接分配内存地址得到初始值,如:
int *p2 = new int(60); (这里为指针p2开辟了60个字节的内存单元)
注:一般通过new分配的有效指针,最后都要进行内存释放,如果不进行内存释放,会造成内存空间不足的问题
内存释放语句: delete [60] p2;
例1:指针赋值语句练习
#include <iostream> using namespace std; void main() { int a=100; int *p,*p1,*p2; //定义三个整型指针变量 p=&a; //将变量a的地址赋值给指针变量p p1=p; //将p中变量a的地址复制给指针变量p1,使指针变量p与p1均指向变量a p2=NULL; //将指针变量p2赋空值 cout<<"a="<<a<<','<<"*p="<<*p<<','<<"p="<<p<<endl; *p1=200; //间接给变量a赋值为200 cout<<"a="<<a<<','<<"*p="<<*p<<','<<"p="<<p<<endl; cout<<"*p1="<<*p1<<','<<"p1="<<p1<<endl; system("pause"); }
例2:通过关键字new初始化
#include <iostream> #include <string> using namespace std; void main() { char *p; strcpy(p,"Hello World !"); cout<<p<<endl; system("pause"); }
上述代码编译出现如下错误:
warning C4700: 使用了未初始化的局部变量“p”
原因分析:
语句char *p; 给变量p分配了一个地址单元,但并没有分配p所指向的数据空间,在执行复制语句时,不知道将字符串"Hello World !"放在内存中的什么地方,因而会出错。
修改如下:
使用关键字new先给变量p分配所指向的内存空间,再将字符串放在这个内存空间中,并由p指向第一个字符位置
#include <iostream> #include <string> using namespace std; void main() { char *p; p=new char[15]; strcpy(p,"Hello World !"); cout<<p<<endl; system("pause"); }