当前位置:   article > 正文

C++ 12.指针—作用、所占内存空间、空指针、野指针、const修饰指针、指针与数组、指针与函数、指针、数组、函数的案例(冒泡排序)_c++指针占用空间

c++指针占用空间

目录

指针的作用

指针所占内存空间

空指针

 野指针

const修饰指针有三种情况

指针和数组

 指针和函数

 指针、数组、函数的案例


指针的作用

可以通过指针间接访问内存。可以通过指针来保存一个地址。
注意事项:内存编号是从0开始记录的,一般用十六进制数字表示;可以利用指针变量保存内存
指针变量定义语法:数据类型 * 指针变量名

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. //1.定义指针
  6. int a = 10;
  7. //指针定义的语法:数据类型 * 指针变量名
  8. int * p;
  9. //让指针记录变量a的地址(建立变量与指针连接)
  10. p = &a;
  11. cout << "a的地址为" << &a << endl;
  12. cout << "指针p为" << p << endl;
  13. //2.使用指针
  14. //解引用:指针前加*,找到指针指向的内存中的数据(*p)
  15. *p = 1000;
  16. cout << "a=" << a << endl;
  17. cout << "*p=" << *p << endl;
  18. system("pause");
  19. return 0;
  20. }

指针所占内存空间

指针也是一种数据类型,这种数据占多少内存
在32位操作系统下:占用4个字节空间
在64位操作系统下:占用8个字节空间

  1. int main()
  2. {
  3. //指针所占内存空间
  4. int a = 10;
  5. //int * p;
  6. //p = &a;//与下一行等价
  7. int * p = &a;
  8. //在32位操作系统下,指针是占4字节空间大小,不管是什么数据类型
  9. //在64位操作系统下,指针是占8字节空间大小
  10. cout << "sizeof (int *)=" << sizeof(p) << endl;
  11. cout << "sizeof (int *)=" << sizeof(int *) << endl;//等价与上一行代码
  12. cout << "sizeof (float *)=" << sizeof(float *) << endl;
  13. cout << "sizeof (double *)=" << sizeof(double *) << endl;
  14. system("pause");
  15. return 0;
  16. }

空指针

指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的;0~255之间的内存编号是系统占用的,因此不可以访问

  1. int main()
  2. {
  3. int * p = NULL;//初始化指针变量
  4. //*p = 100;//空指针指向的内存是不可以访问的
  5. cout << *p << endl;//报错
  6. system("pause");
  7. return 0;
  8. }

 野指针

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

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

const修饰指针有三种情况

1.const修饰指针——常量指针(const修饰指针*p,指针指向的值不能改)
2.const修饰常量——指针常量(const修饰常量p,指针指向不能改)
3.const既修饰指针,又修饰常量

  1. int main()
  2. {
  3. //1.const修饰指针。指针指向可以修改,指针指向的值不可以修改
  4. int a = 10;
  5. int b = 10;
  6. const int *p = &a;//指针P指向a
  7. p = &b;//正确,指针指向可以修改
  8. //*p = 20;//错误,指针指向的值不可以修改
  9. //2.const修饰常量。指针指向的值可以修改,指针指向不可以修改
  10. int * const q = &a;
  11. *q = 20;//正确,指针指向的值可以修改
  12. //q = &b;//错误,指针指向不可以修改
  13. //3.const既修饰指针,又修饰常量。指针指向的值和指针指向都不可以修改
  14. const int * const r = &a;
  15. //r = &b;//错误,指针指向不可以修改
  16. //*r = 20;//错误,指针指向的值不可以修改
  17. system("pause");
  18. return 0;
  19. }

指针和数组

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

  1. int main()
  2. {
  3. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  4. cout << "第一元素为" << arr[0] << endl;
  5. int * p = arr;//arr就是数组的首地址
  6. cout << "利用指针来访问第一个元素" << *p << endl;
  7. p++;//让指针向后偏移4个字节
  8. cout << "利用指针来访问第二个元素" << *p << endl;
  9. cout << "利用指针来遍历数组" << endl;
  10. int *p2 = arr;//arr就是数组的首地址
  11. for (int i = 0; i < 10; i++)
  12. {
  13. //cout << arr[i] << endl;
  14. cout << *p2 << endl;
  15. p2++;
  16. }
  17. system("pause");
  18. return 0;
  19. }

 指针和函数

实现两个数字交换

  1. //实现两个数字交换
  2. void swap01(int a, int b)
  3. {
  4. int temp = a;
  5. a = b;
  6. b = temp;
  7. cout << "swap01 a=" << a << endl;
  8. cout << "swap01 b=" << b << endl;
  9. }
  10. void swap02(int *p1, int *p2)
  11. {
  12. int temp = *p1;
  13. *p1 = *p2;
  14. *p2 = temp;
  15. }
  16. int main()
  17. {
  18. int a = 10;
  19. int b = 20;
  20. //1.值传递,不会改变实参的值
  21. //swap01(a, b);
  22. //cout << "a=" << a << endl;
  23. //cout << "b=" << b << endl;
  24. //2.地址传递,会改变实参的值
  25. swap02(&a, &b);
  26. cout << "a=" << a << endl;
  27. cout << "b=" << b << endl;
  28. system("pause");
  29. return 0;
  30. }

 指针、数组、函数的案例

封装一个函数,利用冒泡排序,实现对整型数组的升序排序

  1. //冒泡排序
  2. void bubbleSort(int *arr, int len)//int *arr可以写成int arr[]
  3. {
  4. for (int i = 0; i < len-1; i++)
  5. {
  6. for (int j = 0; j < len-i-1; j++)
  7. {
  8. if (arr[j] > arr[j + 1])
  9. {
  10. int temp = arr[j];
  11. arr[j] = arr[j + 1];
  12. arr[j + 1] = temp;
  13. }
  14. }
  15. }
  16. }
  17. void printArray(int * arr, int len)
  18. {
  19. for (int i = 0; i < len; i++)
  20. {
  21. cout << arr[i] << endl;
  22. }
  23. }
  24. int main()
  25. {
  26. int arr[10] = { 4,3,2,5,8,9,1,7,10,6 };
  27. int len = sizeof(arr) / sizeof(arr[0]);
  28. bubbleSort(arr,len);
  29. printArray(arr, len);
  30. system("pause");
  31. return 0;
  32. }

                                  

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号