c++指针学习
来源:互联网 发布:mac怎么播放rar 编辑:程序博客网 时间:2024/06/06 09:28
之前对指针与取地址符混淆不会使用,特此总结一次。
1.指针是一个变量,存储的是值的地址而不是值本身,用*表示。
而&表示为地址运算符号。
如:home为一个变量,则&home即为其地址。
指针表示的是一个地址,*运算表示为解除引用运算符。
操作环境:c++ VS2013
int updates=6;int *p_updates;//定义指针 typeName * pointerName;p_updates=&updates;//将updates地址赋给p_updates指针存储/*此时,updates=*p_updates=6;//就像是一枚硬币的正反面 &updates=p_updates=地址的值*/
int *p1,p2//创建了一个指针p1和int变量p2int higgens=5;int *pt=&higgens;//将指针直接初始化为一个地址/*此时,higgens=*pt=5; &higgens=pt=地址的值,其实和上一个例子是一样的 在对指针用*前,一定要将指针初始化为一个确定的适合的地址。*/
2.不能将数字作为地址值简单的赋值给指针,应使用强制类型转换将数字转换为合适的地址类型。如:
int *pt;pt=(int *)0xB8000000;
3.使用new来分配内存
int *pn= new int;//模板/*new int告诉程序,需要适合存储int 的内存,然后它找到这样的内存,并返回其地址。然后将该地址赋值给pn,pn存储该地址,*pn存储那里的值。*/
4.使用delete来释放指针
int *ps =new int;.......delete ps;/*释放ps所指向的内存吗,但不会删除指针ps本身。而new与delete必须配套使用,不要尝试释放已经释放的内存块。对空指针使用delete是安全的。*/
5.使用new创建动态数组并释放
int size;cin>>size;int *psome=new int[size];//返回数组第一个元素的地址并赋值给指针psome...delete [] psome;
6.数组与指针基本等价
指针一般指向数组的第一个元素,但我们也可以进行如下索引:
double * p3=new double[3];p3[0]=0.2;//也等于*p3 c++多将数组名视作为数组第一个元素的地址。p3[1]=0.5;//等价于*(p3+1)p3[2]=0.8;p3=p3+1;//指针将指向第二个元素//区别在于可以修改指针的值,而数组的名为常量不可修改。//对数组求sizeof得到数组的长度,而对指针应用得到指针的长度。
7.当两个指针指向同一个数组时,可以用一个指针减去另一个指针得到两个元素的间隔:
int tacos[10]={1,2,3,4,5,6,7,8,9,10};int * pt=tacos;int * pe=&tacos[9];int diff=pe-pt;//diff=7
8.指针与字符串
如果只给cout提供一个字符的地址,它将从该字符开始打印,直到遇到空字符为止:
char flower[10]="rose";cout<<flower<<endl;//打印结果为"rose",而希望其结果为"r"而类似"hello world"的字符串也类似数组名,也是第一个元素的地址。在cout与多数c++表达式中,char数组名、char指针、以及引号引起的常量字符串都被解释为第一个字符的地址。char *ps;cin>>animal;//fox!ps=animal//并不会复制字符串,只是复制地址。获得副本字符串的操作:ps=new char[strlen(animal)+1];//strlen()来确定字符串长度,+1则表示获得包含空字符时的该字符串的长度。然后再用new来分配内存空间。strcpy(ps,animal);//将字符串拷贝到新的存储空间。//strcpy函数参数第一个为目标地址,第二个为要复制字符串的地址。strncpy函数还有第三个参数为要复制的最大字符数。strcpy,strncpy基于C风格的<cstring>库而c++<string>库可以使用赋值运算符号进行上述运算而不用担心跨界了
9.使用new创建动态结构
/*如果结构标识符是结构名,则用句点运算符;如果结构标识符是指向结构的指针,则用箭头运算符。*/struct things{ int good; int bad;}things grubnose = {3,453};things *pt = &grubnose;//grubnose.good=pt->good=3//grubnose.bad=pt->bad=453
阅读全文
0 0
- C 指针的学习
- C和指针学习
- [C学习]指针初识
- C指针学习记录
- 学习C语言指针
- C和指针学习
- c指针学习
- C 指针学习笔记
- c 指针学习记录
- C和指针学习
- C语言指针学习
- c基础学习 - 指针
- 学习《C和指针》
- 《C和指针》学习
- C指针学习笔记
- c 结构指针学习
- C语言指针学习
- C指针学习笔记
- 权限
- Ubuntu 16.04 Python读取MySQL数据库中文乱码的问题
- 矩阵中的路径
- VIP视频会员,无限制看剧对人的自制力,产生了严重的考验和折磨
- 【矩阵论】线性变换及其矩阵
- c++指针学习
- bzoj1003: [ZJOI2006]物流运输
- Codeforces 276C Little Girl and Maximum Sum(线段树的区间更新)
- fragment
- 这些术语关乎你的程序执行效率
- RidaoGroup点击事件
- unity制作聊天室界面
- angularjs中对表格数据进行增删改查操作详细
- LAMP部署(php模块化)