【c++】指针

目录

1.1指针的基本概念

1.2指针变量的定义和使用

1.3指针所占内存空间

1.4空指针和野指针

1.5const修饰指针

1.6指针和数组

1.7指针和函数

1.8指针、数组、函数


1.1指针的基本概念

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

1.2指针变量的定义和使用

1.定义指针

语法:数据类型 *指针变量名;eg:int *p;

让指针记录变量a的地址                   p=&a;

2.使用指针

可以通过解引用指针前面加个*)的方式来找到指针指向的内存,即代表的是指针指向内存中的数据。

1.3指针所占内存空间

在32位操作系统下占用4个字节,64位下占用8个。

sizeof(float *)/sizeof(int *)/sizeof(double *)/sizeof(char *)都是

1.4空指针和野指针

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

用途:初始化指针变量

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

eg:int *p=NULL;----空指针

*p=100;或者打印*p----运行后系统会出错,因为0~255之间的内存编号是系统占用的,因此不可以被访问。

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

eg:int *p=(int *)0x1100; //指针变量p指向内存地址编号为0x1100的空间

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

1.5const修饰指针

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

eg:int a=10;int b=20; const int *p=&a;(const后面是int *,所以*的操作不能做)

特点:指针的指向可以修改,指针指向的值不可以修改

*p=20;--错

p=&b;--对

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

eg:int * const p=&a;(const后面是p,所以p的操作是错的)

特点:指针的指向不可以修改,指针指向的值可以修改

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

eg:const int * const p=&a;(const后面是int *,const 后面也是p)

特点:指针的指向不可以修改,指针指向的值不可以修改

1.6指针和数组 

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

案例:利用指针访问整个数组元素,并打印

#include<iostream>
using namespace std;
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
	int *p = arr;//指向首元素
	for (int i = 0; i < 10; i++)
	{
		
		cout << *p<< endl;
		p++;
	}
	system("pause");
	return 0;
}

1.7指针和函数

1.值传递

2.地址传递

如之前交换两数案例:

#include<iostream>
using namespace std;
void swap(int a, int b)
{
	int temp=0;
	temp = a;
	a = b;
	b = temp;
}
void swap2(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
int main()
{
	int a = 10;
	int b = 20;
	//值传递
	swap(a, b);
	cout << a << " " << b << endl;
	//地址传递
	swap2(&a, &b);
	cout << a << " " << b << endl;
	system("pause");
	return 0;
}

此时,运行就会发现下面的ab两个值发生了交换。

1.8指针、数组、函数

案例:利用冒泡排序,实现对整型数组的升序

需要传入数组首地址、数组长度这两个参数

#include<iostream>
using namespace std;
void maopao(int *arr, int len)//数组首地址、数组长度
{
	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;
			}
		}
	}
}
int main()
{
	int arr[10] = { 4, 3, 6, 9, 8, 7, 2, 1, 0, 5 };
	int len = sizeof(arr) / sizeof(arr[0]);
	maopao(arr, len);
	//打印数组
	for (int i = 0; i < 10; i++)
	{
		cout <<arr[i]<< endl;
	}
	system("pause");
	return 0;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>