当前位置:   article > 正文

C++之指针_c++ 打印指针

c++ 打印指针

指针的基本概念

指针的作用: 可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示
  • 可以利用指针变量保存地址

指针变量的定义和使用

指针变量定义语法: 数据类型 * 变量名;

  1. int main() {
  2. //1、指针的定义
  3. int a = 10; //定义整型变量a
  4. //指针定义语法: 数据类型 * 变量名 ;
  5. int * p;
  6. //指针变量赋值
  7. p = &a; //指针指向变量a的地址
  8. cout << &a << endl; //打印数据a的地址
  9. cout << p << endl; //打印指针变量p
  10. //2、指针的使用
  11. //通过*操作指针变量指向的内存
  12. cout << "*p = " << *p << endl;
  13. system("pause");
  14. return 0;
  15. }

指针变量和普通变量的区别

  • 普通变量存放的是数据,指针变量存放的是地址
  • 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用

指针所占内存空间

提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?

  1. int main() {
  2. int a = 10;
  3. int * p;
  4. p = &a; //指针指向数据a的地址
  5. cout << *p << endl; //* 解引用
  6. cout << sizeof(p) << endl;
  7. cout << sizeof(char *) << endl;
  8. cout << sizeof(float *) << endl;
  9. cout << sizeof(double *) << endl;
  10. system("pause");
  11. return 0;
  12. }

总结:所有指针类型在32位操作系统下是4个字节

空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的

  1. int main() {
  2. //指针变量p指向内存地址编号为0的空间
  3. int * p = NULL;
  4. //访问空指针报错
  5. //内存编号0 ~255为系统占用内存,不允许用户访问
  6. cout << *p << endl;
  7. system("pause");
  8. return 0;
  9. }

野指针:指针变量指向非法的内存空间

  1. int main() {
  2. //指针变量p指向内存地址编号为0x1100的空间
  3. int * p = (int *)0x1100;
  4. //访问野指针报错
  5. cout << *p << endl;
  6. system("pause");
  7. return 0;
  8. }

总结:空指针和野指针都不是我们申请的空间,因此不要访问。

const修饰指针

const修饰指针有三种情况

  1. const修饰指针 --- 常量指针
  2. const修饰常量 --- 指针常量
  3. const即修饰指针,又修饰常量
  1. int main() {
  2. int a = 10;
  3. int b = 10;
  4. //const修饰的是指针,指针指向可以改,指针指向的值不可以更改
  5. const int * p1 = &a;
  6. p1 = &b; //正确
  7. //*p1 = 100; 报错
  8. //const修饰的是常量,指针指向不可以改,指针指向的值可以更改
  9. int * const p2 = &a;
  10. //p2 = &b; //错误
  11. *p2 = 100; //正确
  12. //const既修饰指针又修饰常量
  13. const int * const p3 = &a;
  14. //p3 = &b; //错误
  15. //*p3 = 100; //错误
  16. system("pause");
  17. return 0;
  18. }

指针和数组

作用:利用指针访问数组中元素

  1. int main() {
  2. int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  3. int * p = arr; //指向数组的指针
  4. cout << "第一个元素: " << arr[0] << endl;
  5. cout << "指针访问第一个元素: " << *p << endl;
  6. for (int i = 0; i < 10; i++)
  7. {
  8. //利用指针遍历数组
  9. cout << *p << endl;
  10. p++;
  11. }
  12. system("pause");
  13. return 0;
  14. }

指针和函数

作用:利用指针作函数参数,可以修改实参的值

  1. //值传递
  2. void swap1(int a ,int b)
  3. {
  4. int temp = a;
  5. a = b;
  6. b = temp;
  7. }
  8. //地址传递
  9. void swap2(int * p1, int *p2)
  10. {
  11. int temp = *p1;
  12. *p1 = *p2;
  13. *p2 = temp;
  14. }
  15. int main() {
  16. int a = 10;
  17. int b = 20;
  18. swap1(a, b); // 值传递不会改变实参
  19. swap2(&a, &b); //地址传递会改变实参
  20. cout << "a = " << a << endl;
  21. cout << "b = " << b << endl;
  22. system("pause");
  23. return 0;
  24. }

总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/758855
推荐阅读
相关标签
  

闽ICP备14008679号