赞
踩
目录
可以通过指针间接访问内存。可以通过指针来保存一个地址。
注意事项:内存编号是从0开始记录的,一般用十六进制数字表示;可以利用指针变量保存内存
指针变量定义语法:数据类型 * 指针变量名
- #include <iostream>
- using namespace std;
- int main()
- {
- //1.定义指针
- int a = 10;
- //指针定义的语法:数据类型 * 指针变量名
- int * p;
- //让指针记录变量a的地址(建立变量与指针连接)
- p = &a;
- cout << "a的地址为" << &a << endl;
- cout << "指针p为" << p << endl;
-
- //2.使用指针
- //解引用:指针前加*,找到指针指向的内存中的数据(*p)
- *p = 1000;
- cout << "a=" << a << endl;
- cout << "*p=" << *p << endl;
-
- system("pause");
- return 0;
- }
指针也是一种数据类型,这种数据占多少内存
在32位操作系统下:占用4个字节空间
在64位操作系统下:占用8个字节空间
- int main()
- {
- //指针所占内存空间
- int a = 10;
- //int * p;
- //p = &a;//与下一行等价
-
- int * p = &a;
-
- //在32位操作系统下,指针是占4字节空间大小,不管是什么数据类型
- //在64位操作系统下,指针是占8字节空间大小
- cout << "sizeof (int *)=" << sizeof(p) << endl;
- cout << "sizeof (int *)=" << sizeof(int *) << endl;//等价与上一行代码
- cout << "sizeof (float *)=" << sizeof(float *) << endl;
- cout << "sizeof (double *)=" << sizeof(double *) << endl;
-
- system("pause");
- return 0;
- }
指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的;0~255之间的内存编号是系统占用的,因此不可以访问
- int main()
- {
- int * p = NULL;//初始化指针变量
- //*p = 100;//空指针指向的内存是不可以访问的
- cout << *p << endl;//报错
-
- system("pause");
- return 0;
- }
指针变量p指向非法的内存空间
- int main()
- {
- //指针变量p指向内存地址编号为0x1100的空间
- int * p = (int *)0x1100;
- //访问野指针报错
- cout << *p << endl;
-
- system("pause");
- return 0;
- }
1.const修饰指针——常量指针(const修饰指针*p,指针指向的值不能改)
2.const修饰常量——指针常量(const修饰常量p,指针指向不能改)
3.const既修饰指针,又修饰常量
- int main()
- {
- //1.const修饰指针。指针指向可以修改,指针指向的值不可以修改
- int a = 10;
- int b = 10;
- const int *p = &a;//指针P指向a
- p = &b;//正确,指针指向可以修改
- //*p = 20;//错误,指针指向的值不可以修改
-
- //2.const修饰常量。指针指向的值可以修改,指针指向不可以修改
- int * const q = &a;
- *q = 20;//正确,指针指向的值可以修改
- //q = &b;//错误,指针指向不可以修改
-
- //3.const既修饰指针,又修饰常量。指针指向的值和指针指向都不可以修改
- const int * const r = &a;
- //r = &b;//错误,指针指向不可以修改
- //*r = 20;//错误,指针指向的值不可以修改
-
- system("pause");
- return 0;
- }
作用:利用指针访问数组中元素
- int main()
- {
- int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
- cout << "第一元素为" << arr[0] << endl;
-
- int * p = arr;//arr就是数组的首地址
- cout << "利用指针来访问第一个元素" << *p << endl;
- p++;//让指针向后偏移4个字节
- cout << "利用指针来访问第二个元素" << *p << endl;
-
- cout << "利用指针来遍历数组" << endl;
- int *p2 = arr;//arr就是数组的首地址
- for (int i = 0; i < 10; i++)
- {
- //cout << arr[i] << endl;
- cout << *p2 << endl;
- p2++;
- }
-
- system("pause");
- return 0;
- }
实现两个数字交换
- //实现两个数字交换
- void swap01(int a, int b)
- {
- int temp = a;
- a = b;
- b = temp;
- cout << "swap01 a=" << a << endl;
- cout << "swap01 b=" << b << endl;
- }
- void swap02(int *p1, int *p2)
- {
- int temp = *p1;
- *p1 = *p2;
- *p2 = temp;
- }
- int main()
- {
- int a = 10;
- int b = 20;
- //1.值传递,不会改变实参的值
- //swap01(a, b);
- //cout << "a=" << a << endl;
- //cout << "b=" << b << endl;
-
- //2.地址传递,会改变实参的值
- swap02(&a, &b);
- cout << "a=" << a << endl;
- cout << "b=" << b << endl;
-
- system("pause");
- return 0;
- }
封装一个函数,利用冒泡排序,实现对整型数组的升序排序
- //冒泡排序
- void bubbleSort(int *arr, int len)//int *arr可以写成int arr[]
- {
- for (int i = 0; i < len-1; i++)
- {
- for (int j = 0; j < len-i-1; j++)
- {
- if (arr[j] > arr[j + 1])
- {
- int temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }
- }
- void printArray(int * arr, int len)
- {
- for (int i = 0; i < len; i++)
- {
- cout << arr[i] << endl;
- }
- }
- int main()
- {
- int arr[10] = { 4,3,2,5,8,9,1,7,10,6 };
- int len = sizeof(arr) / sizeof(arr[0]);
- bubbleSort(arr,len);
- printArray(arr, len);
- system("pause");
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。