c++之指针

指针的定义和使用:

#include<iostream>
using namespace std;

//指针: 
int main(){
	//1.定义一个指针
	int a=10;
	int*p;//语法:数据类型*指针变量名 
	p=&a;//让指针记录a的地址
	cout<<"a的地址为"<< &a<<endl;
	cout<<"指针p为"<<p<<endl;
	//2.如何使用指针 
	//可以通过解引用的方式来找到指针指向的内存
	//指针前加*代表解引用,找到指针指向的内存中的数据
	*p=1000; 
	cout<<"a="<<a<<endl; 
	
	return 0;
}

指针所占内存空间

#include<iostream>
using namespace std;
 
int main(){
	//指针占用四个字节空间
	int a=10;
	int*p;
	p=&a;
	//也可以这样int*p=&a;
	cout<<"sizeof(int*)"<<sizeof(int*)<<endl;
	
	return 0;
}

空指针和野指针

#include<iostream>
using namespace std;
 
int main(){
	//空指针:指针变量指向内存编号为0的空间
	//用途:初始化指针变量
	//空指针指向的内存是不能访问的
	int*p=NULL;
	//0~255的内存编号是系统占用的,都不可以访问 
	
	//野指针:指针变量指向非法内存空间 
	//在程序中,尽量避免出现野指针 
	int*a=(int*)0x0100 ;
	return 0;
}

const修饰指针

#include<iostream>
using namespace std;
 
int main(){
	//常量指针:指针指向可以改,指向的值不可以改
	int a=10;
	int b=10;
	const int* p=&a;
	p=&b;// (指向可以改)
	
	//指针常量: 指针指向不可以改,指向的值可以改
	int*const p2=&a;
	*p2=20 ;
	
	const int*const p3=&a; //啥都不可以改 
	return 0;
}

利用指针访问数组

#include<iostream>
using namespace std;
 
int main(){
	//指针和数组
	//利用指针访问数组中的元素
	
	int arr[10]={1,2,3,4,5,6,7,8,9,10};
	int*p=arr;//arr为数组的首地址a[0]
	cout<<"利用指针来访问第一个元素"<<*p<<endl;
	p++;//让指针向后偏移四个字节
	cout<<"利用指针来访问第二个元素"<<*p<<endl;
	int*p2=arr;
	for(int i=0;i<10;i++)
	{
		cout<<*p2<<endl;
		p2++;
	 } 
	return 0;
}

指针和函数

#include<iostream>
using namespace std;

//地址传递 :可以改变实参 
void swap(int*p1,int*p2)
{
	int temp=*p1;
	*p1=*p2;
	*p2=temp;
}
int main(){
	int a=10;
	int b=20;
	swap(&a,&b); 
	cout<<"a="<<a<<endl;
	cout<<"b="<<b<<endl;	
	return 0;
}


指针配合数组和函数案例

#include<iostream>
using namespace std;
//冒泡排序函数 
void bubbleSort(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;
			}
		}
	}
}
void printArray(int*arr,int len)
{
	for(int i=0;i<len;i++)
	{
		cout<<arr[i]<<endl;
	}
}
		
int main(){
	int arr[10]={1,3,5,9,2,4,6,8,7,10};
	int len=sizeof(arr)/sizeof(arr[0]);
	bubbleSort(arr,len);
	printArray(arr,len);
		
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值