指针巩固

 

 

 

 

 

 

 

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int num = 0;
 6     int* p = &num;
 7     cout << p << "\t" << &num << endl;//0x6dfee8        0x6dfee8
 8     cout << *p << "\t" << num << endl;//0       0
 9     return 0;
10 }
复制代码
复制代码
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int num = 0;
 6     int* p = &num;
 7     cout << p << "\t" << &num << endl;//0x6dfee8        0x6dfee8
 8     cout << *p << "\t" << num << endl;//0       0
 9 
10     char ch = 'd';
11     char* p_ch =&ch;
12     //char* 使p_ch会被当成字符串指针打印
13     cout << p_ch << "\t" << *p_ch << endl;//d       d
14     cout << (void*)p_ch << "\t" << *p_ch << endl;//0x6dfee3        d
15     return 0;
16 }
复制代码

 

 

 

关于void*的一个详细介绍

 

 

 

 关于空指针和空类型指针和野指针的介绍

 

 

 

 

 

  

 

 

复制代码
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int a = 10;
 6     int &b = a;
 7     cout << b << a << endl;//1010
 8     //int &c=10;//报错,引用对象不可以赋值为一个常数。
 9     const int &d = 10;
10     cout << d << endl;//10
11     //加上const是常量引用,不加是变量引用
12     //引用相比于指针安全,所以推荐使用引用
13     return 0;
14 }
复制代码

 

 引用变量和原来的变量指向的内存空间一致。

 

数组名确实是数组的首地址,但是在sizeof(array)下是数组类型,大小是数组所占内存大小

 

 

复制代码
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int num[4] = {1,2,5,4};
 6     int *p_a = num;
 7     int *p_b = &num[0];
 8     cout << p_a[0] << "---" << p_b[1] << endl;
 9     cout << *(++p_a) << "---" << *(p_b + 1) << endl;//*++num是不对的,不可以对数组名进行加减
10     
11     return 0;
12 }
复制代码

 

    

 

  

复制代码
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int num[5];
 6     int *nums = new int[5];
 7     cout << sizeof(num) << '\t' << sizeof(nums) << endl;//20      4
 8     //一个是数组,一个是变量。
 9 
10     delete [] nums;
11     nums = nullptr;//指向空指针,否则就成为野指针。容易内存泄漏
12     int* ptr = new int;
13     delete ptr;
14     ptr = nullptr;
15     return 0;
16 }
复制代码

 

 

 

 

复制代码
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int (*p)[3] = new int[3][3];
 6     p[1][1]=987;
 7     for(int i = 0;i < 3; i++){
 8         for(int j = 0;j< 3; j++){
 9             cout << p[i][j] <<"=="<< *(*(p+i)+j) << " || ";//两种输出方法
10         }
11         cout << endl;
12     }
13     return 0;
14 }
复制代码

 

posted @   你的雷哥  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示