C++5(指针)

指针

代码示例

#include<iostream>
using namespace std;

int main()
{
	//定义一个指针:1.创建变量 2.创建指针 3.建立关系
	int a = 10;
	//指针定义语法:数据类型  *指针变量名;
	int * p;//也可 int *p = &a;
	//让指针变量记录a的变量地址
	p = &a;

	cout << "a的地址为" << &a << endl;
	cout << "指针p为" << p << endl;

	//使用指针
	//可以通过解引用的方式来找到指针指向的内存
	//指针前加*,即为解引用,找到指针指向内存中的数据,如*p
	*p = 1000;
	cout << "a=" << a << endl;
	cout << "*p=" << *p << endl;
	cout << "sizeof(int *)=" << sizeof(int *) << endl;
	cout << "sizeof(double *)=" << sizeof(double *) << endl;
	cout << "sizeof(char *)=" << sizeof(char *) << endl;
	//32位操作系统下,存指针均占用4字节
	

	//空指针:用于给指针变量进行初始化,空指针是不能进行访问的
	int * p1 = NULL;//注意不允许访问,即不能解引用cout<<*p1<<endl;

	//野指针
	int *p2 = (int *)0x1100;//注意不允许访问,即不能解引用cout<<*p2<<endl;
	//程序中要避免野指针

	//常量指针 const修饰的是指针  const int * p = &a;
	//该指针指向地址可改,但指向的内容不可改,即*p不可改,但p可改

	//指针常量  int * const p = &a;
	//该指针指向的值可改,但指向的地址不可改,即p不可改,但*p可改

	//const既修饰指针,又修饰常量  const int * const p = &a;
	//指针的指向  与 指针的值  均不能改变

	system("pause");
	return 0;
}

指针与数组

	//指针与数组
	//利用指针访问数组数据
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

	int * p = &arr[0];
	cout << *p << endl;
	int i = 1;
	while ( i < (sizeof(arr)) / (sizeof(arr[0])) )
	{
		p++;
		cout << *p << endl;
		i++;
	}

指针与函数

void swap01(int num1, int num2)//值传递,不可改变实参
	{
	int swap_temp1;
	swap_temp1 = num1;
	num1 = num2;
	num2 = swap_temp1;
	cout << num1 << "   " << num2 << endl;
    }

void swap02(int *p1, int *p2)//地址传递,可以改变实参
{
	int swap_temp2;
	swap_temp2 = *p1;
	*p1 = *p2;
	*p2 = swap_temp2;
	cout << *p1 << "   " << *p2 << endl;
}

※综合案例代码(封装函数,冒泡升序数组)

void swap03(int len, int *arr)
{
	for (int i = 0; i < len - 1; i++)//轮数=元素个数-1
	{

		for (int j = 0; j < len - i - 1; j++)//轮内比较次数=元素个数-轮数-1
		{
			if (arr[j] < arr[j + 1])
			{
				int swap_temp3 = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = swap_temp3;
			}
		}
	}
}

void print(int len,int *arr)
{
	for (int print_i = 0; print_i < len; print_i++)
	{
		cout << arr[print_i] << endl;
	}
}

int main()
{
	int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
	int len = (sizeof(arr)) / (sizeof(arr[0]));

	swap03(len, arr);
	print(len, arr);
	
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值