C++ 一些学习笔记(一)指针部分

主要是针对之前学习C的时候一些知识点的遗漏的补充,还有一些我自己觉得比较重要的地方。

本文章的主要内容是关于指针的。

1.函数的分文件编写

1.创建后缀为.h的头文件
2.创建后缀为.cpp的源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
5.使用时调用头文件

2.指针

指针的作用:可以通过指针间接访问内存
在32位操作系统下,指针占用4个字节;在64位操作系统下,指针占用8个字节。

  • 内存编号是从0开始记录的,一般用十六进制来表示
  • 可以利用指针变量保存地址

指针的格式:

1.定义指针
int a =0;
//指针定义的语法:数据类型*指针变量名;
int *p;
//让指针记录变量a的地址
p=&a;//&为取址符
//int*p=&a;

2.使用指针
//可以通过解引用来找到指针指向的内存,指针前加*代表解引用,代表指针所指向内存中的数据
*p;

3.指针占用的内存
不管是什么数据类型,在32位操作系统下,指针占用4个字节;在64位操作系统下,指针占用8个字节。
sizeof(int*);
sizeof(p);

4.空指针和野指针
空指针:指针指向内存编号中为0的空间
用途:初始化指针变量
注意:空指针指向的内存不可访问(0-255之间的内存编号是系统占用的,不可访问)

野指针:指针指向非法的内存空间。
程序中要避免出现野指针。

3.const修饰指针

const修饰指针的三种情况:

  • const修饰指针:常量指针
  • const修饰常量:指针常量
  • const既修饰指针,又修饰常量
1.const修饰指针——常量指针
const int*p=&a;//常量指着
常量指针的指向可以修改,但是指针指向的值不可以修改;

2.const修饰常量:指针常量
int*const p=&a;;
指针的指向不可以更改,但是指针指向的值可以修改;

3. const既修饰指针,又修饰常量
const int*const p=&a;
指针指向的指向,指向的值都不可以修改;

4.指针和数组

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

int arr[10]={1,2,3,4,5,6,7,8,9,10};
int*p=arr;//arr就是数组首地址
cout<<"利用指针访问第一个元素:"<<*p<<endl;
p++;//让指针向后偏移4个字节
cout<<"利用指针访问第二个元素:"<<*p<<endl;

5.指针和函数

void swap01(int a,int b)//实现两个数字进行交换
{
	int temp=a;
	a=b;
	b=temp;
}
void swap02(int*p1,int*p2)//实现两个数字进行交换,实际上交换了数据存放地址里的值
{
	int temp=*p1;
	*p1=*p2;
	*p2=temp;
}
int main(){
	int a=10;
	int b=20;
	//swap01(a,b);//1.值传递
	swap01(&a,&b);//2.地址传递
}


1.值传递不能改变实参
2.地址传递可以改变实参
总结:如果不想修改实参,就用值传递;如果想修改实参,就用地址传递。

6.指针、数组、函数

案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排列

//冒泡排序函数
//冒泡排序
#include <iostream>
using namespace std;
//冒泡排序函数
void bubbleSort(int*arr,int len)//参数1 数组首地址,参数2 数组长度
{
    for (int i=0; i<len; i++) {
        for (int j=0; j<len-i-1; j++) {
            if (arr[j]>arr[j+1]) {
                //如果将j>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,2,8,0,5,7,1,3,9,10};//创建数组
    int len=sizeof(arr)/sizeof(arr[0]);//数组长度
    bubbleSort(arr, len);//创建函数实现冒泡排序
    printArray(arr,len);//打印
    return 0;
    //
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值