c/c++整理--引用和指针(3)
来源:互联网 发布:如何确保淘宝免邮 编辑:程序博客网 时间:2024/06/07 03:32
一、找错——内存访问违规
#include <iostream>using namespace std;int main(){char a;char *str1 = &a;char *str2 = "AAA";strcpy(str1, "hello");cout<<str1<<endl;str2[0] = 'B';cout<<str2<<endl;return 0;}
第11行将一个字符串拷贝到一个字符中,内存不够,程序崩溃。第13行,str2指向“AAA”这个字符串常量,所以对常量更改不合法,程序崩溃。
二、指针的隐式转换
找出错误
#include <stdio.h>int main(){int ival = 1024;int ival2 = 2048;int *pi1 = &ival;int *pi2 = &ival2;int **pi3 = 0;ival = *pi3; *pi2 = *pi3;ival = pi2;pi2 = *pi1;pi1 = *pi3;ival = *pi1;pi1 = ival;pi3 = &pi2;return 0;}第11行编译错误,pi3是一个二级指针,*pi3是一级指针,ival是int型数据,不能隐式转换。
第12行编译错误,*pi2就是ival2,错误原因同上。
第13行编译错误,pi2是一个指针,ival是int型数据,不能隐式转换。
第14行编译错误,pi2是一个指针,*pi1就是ival,不能隐式转换。
第15行运行错误,pi3是NULL指针,*pi3会使程序崩溃。
第17行编译错误,pi1是一个指针,ival是int型数据,不能隐式转换。
三、指针常量和常量指针的区别
常量指针就是指向常量的指针,它所指向的内容是不可修改的。
指针常量就是指针的常量,他是不可改变的指针,但可以对它指向的内容修改。
四、指针的区别
下列四个指针有什么区别:
char *const p1;char const *p2;const char* p3;const char * const p4;
第一个为指针常量,本身不可更改,指向内容可以更改。
第二个和第三个为常量指针,本身可以更改,指向内容不可更改。
第四个本身是常量,指向的内容也不能更改。
五、找错——常量指针和指针常量的作用
#include <stdio.h>int main(){const char* node1 = "abc";char* const node2 = "abc";node1[2] = 'k';*node1[2] = 'k';*node1 = "xyz";node1 = "xyz";node2[2] = 'k';*node2[2] = 'k';*node2 = "xyz";node2 = "xyz";return 0;}
代码中,node1是常量指针,node2是指针常量,所以对node1的值进行更改的操作都是错误的,第8、9、10编译错误。对node2指针地址的更改操作也都是错的,所以第14、16行编译错误,第13、15运行错误。
六、this指针的叙述
下列关于this指针的叙述中,正确的是()
A. 任何与类相关的函数都有this指针。
B. 类的成员函数都有this指针。
C. 类的友元函数都有this指针。
D. 类的非静态成员才有this指针。
A错误,类的非静态成员函数属于类的对象,含有this指针,类的static函数属于类本身,不含有this指针。
B错误,理由同上。
C错误,友元函数是非成员函数,无法使用this指针。
D正确
七、this指针的使用
#include <iostream>using namespace std;class MyClass{public:int m_data;MyClass(int data){this->m_data = data;}void print(){cout<<"m_data = "<<m_data<<endl;}};int main(){MyClass *PMC;PMC = new MyClass(21);PMC->print();return 0;}
输出:
m_data = 21
0 0
- c/c++整理--引用和指针(3)
- c/c++整理--引用和指针(1)
- c/c++整理--引用和指针(2)
- c/c++整理--引用和指针(4)
- c/c++整理--引用和指针(5)
- 指针和引用(c++)
- c/c++易错知识点整理3(引用和指针)(一)
- c++:引用和指针
- C和指针 整理
- 指针和引用的区别(C++)
- [C++]指针和引用(一)
- [C++]指针和引用(三)
- [C++]指针和引用(四)
- c指针和c++引用
- c/c++ 引用和指针
- c的指针*和引用&
- [C++]指针和引用(二)
- 【C】指针、引用和数组
- Oracle_ojdbc6 使用 报错
- java.lang.SecurityManager、java.security包
- iOS 蓝牙通信技术(EAP和BLE)
- CentOS_VMware下网络配置三种方式:
- Vim_合并行操作
- c/c++整理--引用和指针(3)
- Vim_行首或行尾插入指定字符串
- 一些域渗透的小tips
- CentOS_vncserver configuration
- 结对编程_100以内四则运算
- Android常见滑动冲突场景
- unsigned char s1 : 2的用法
- Win7_安装CentOS
- centos下安装Tsung安装