栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

指针与引用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指针与引用

2022.05.13
      • 取地址
      • 指针
        • 数组与指针
        • 指针运算
      • 引用

取地址
#include 
using namespace std;

char a, b;
string aa;

int main(){
	char c, d;
	cout << (void*)&c << endl;
	cout << (void*)&d << endl;
	
	cout << (void*)&a << endl;
	cout << (void*)&b << endl;
	cout << &aa << endl;
	return 0;
}


操作系统中,分为堆、栈来存储变量。局部变量存在栈中,全局变量存在堆中。32位地址可表征4GB空间。

因此局部变量根据定义顺序,其地址递减;
全局变量根据定义顺序,其地址递增,且地址小于局部变量。

指针
#include 
using namespace std;

char a, b;

int main(){
	int a = 10;
	int* p = &a; // p为地址

	// 可读取,并修改 类似通过数组下标修改元素值 
	cout << *p << endl; 
	*p = 12;
	
	cout << *p << endl;
	cout << a << endl; // 同样改变
	
	return 0;
}

输出:

10
12
12
数组与指针
#include 
using namespace std;


int main(){
	char c;
	int a[5] = {1, 2, 3, 4, 5};
	cout << (void*)&c << endl;
	cout << a << endl; // 数组地址
	for(int i = 0; i < 5; i ++ ){
		cout << (void*)&a[i] << endl;
	}
	
	
	return 0;
}


注:scanf("%d", a + 1);可用于输入某个数,该表达式为对a[1]赋值为输入

指针运算

指针p+1,不是简单的地址加1,而是需要看变量类型。

#include 
using namespace std;


int main(){
	char c;
	int a[5] = {1, 2, 3, 4, 5};
	
	int *p = a;
	cout << p << endl;
	cout << (p + 1) << endl;
	
	
	return 0;
}


指针支持同类型的加减运算:同样地,看输出相差几个该变量类型。

#include 
using namespace std;


int main(){
	char c;
	int a[5] = {1, 2, 3, 4, 5};
	
	int *p = &a[0];
	int *q = &a[2];
	cout << q - p << endl;
	
	
	return 0;
}

引用
#include 
using namespace std;


int main(){
	int a = 10;
	
//	int* p = &a;
	int& p = a; // 引用相当于别名 
	p += 5;
	cout << p << endl; 
	cout << a << endl;
	
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879778.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号