C++学习笔记2-----C++ 引用 vs 指针-CSDN博客

50 阅读1分钟

引用很容易与指针混淆,它们之间有三个主要的不同:
1.不存在空引用。引用必须连接到一块合法的内存。
2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3.引用必须在创建时被初始化。指针可以在任何时间被初始化。

注意:引用传递可以改变值,通过引用或地址传递参数,使传递的参数在调用函数中被改变。

void swap(int* a, int* b){
    int temp = *a;
    *a = *b;
    *b = temp;
}//这里需要注意了,不是直接交换指针地址,而是交换地址里面的值

int s = 5;
int& sPointor = s;
void swap2(int& a, int& b){
    int temp = a;
    a = b;
    b = temp;
}

int a = 3;
    int b = 4;
//    swap(&a,&b);
    swap2(a,b);
    cout << "a = " << a << ";b = " << + b << endl;

最终结果都是:a = 4;b = 3

 

const修饰指针
1.通过指针修改const修饰的常量
const int a = 10;
int *p += &a;
*p = 100;
a =100;
可以通过1级指针修改一个常量的值

2.const修饰指针类型 int * 不能改变指针变量指向的内存地址的值 但是可以改变指针指向的地址 
const int *p = &a
p=&b
*p = 100
可以改变指针指向的地址

3.const修饰指针变量    能改变指针指向地址的值,但不能改变指针指向的地址

int * const p = &a;
*p = 100;
~~ p=&b~~
可以修改指针指向地址的值

4.const修饰指针类型修饰指针变量  不能改变指针指向的的值 也不能改变指针指向的地址 
const int * const *p = &a;
*p =100;
p = &b;

可以通过二级指针进行修改

 

撸一段C语言的冒泡排序:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

extern void sort(int* p, int length);

int main()
{
	int arr[] = { 4,3,6,2,7,8,1 };

	int* p = arr;
	int length = sizeof(arr) / sizeof(int);

	printf("len = %d\n", length);

	for (int i = 0; i < length; i++)
	{
		printf("%d ", *(p + i));
	}
	printf("\n");

	sort(p, sizeof(arr) / sizeof(int));

	for (int i = 0; i < length; i++)
	{
		printf("%d ", *(p + i));
	}

	return EXIT_SUCCESS;
}

	void sort(int* p, int length)
	{
		for (int i = 0; i < length - 1; i++)
		{
			for (int j = 0; j < length - 1 - i; j++)
			{
				if (*(p + j) > * (p + j + 1)) 
				{
					int temp = *(p + j);
					*(p + j) = *(p + j + 1);
					*(p + j + 1) = temp;
				}
			}
		}
	}