当前位置:   article > 正文

C++学习历程6:指针_c++ main 定义指针

c++ main 定义指针

1.定义

  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. }

 

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

  • 普通变量存放的是数据,指针变量存放的是地址

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

2.指针的大小

  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个字节 

3.空指针

用途:初始化指针变量 ,切记不可访问

  1. int * p = NULL;
  2. //访问空指针报错
  3. //内存编号0 ~255为系统占用内存,不允许用户访问
  4. cout << *p << endl;

4.野指针

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

	int * p = (int *)0x1100;//非法空间

5.const 修饰指针

const修饰指针有三种情况

  1. const修饰指针 --- 常量指针

  2. const修饰常量 --- 指针常量

  3. const即修饰指针,又修饰常量

记忆方法:看const 和*的位置。const在左即为常量指针,const在右即为指针常量。

                  常量指针:指针指向一个常量,指向可以改变,指向的值不能改变。

                  指针常量:指针是一个常量,指向不可以改变,指向的值可以改变。

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

6.指针和函数

  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. }

7. 应用

  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 - 1 - i; 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. //打印数组函数
  18. void printArray(int arr[], int len) //注意接收数组的形参的写法
  19. {
  20. for (int i = 0; i < len; i++)
  21. {
  22. cout << arr[i] << endl;
  23. }
  24. }
  25. int main() {
  26. int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
  27. int len = sizeof(arr) / sizeof(int);
  28. bubbleSort(arr, len);//数组名
  29. printArray(arr, len);
  30. system("pause");
  31. return 0;
  32. }

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号