8.25 指针

一重指针

指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。

注:指针只能存储同类型之间的地址,不同类型需要进行强制进制转换。

一重指针的简单操作:

#include<bits/stdc++.h>
using namespace std;

int a = 10;

int *p = &a;

二重指针

二重指针是指向指针的指针,存储指针变量的地址 。

二重指针的简单操作:

#include<bits/stdc++.h>
using namespace std;

int a = 10;

int *p = &a;

int **pt = &p;//pt = &(&a) *pt = &a, **pt = a;

cout<<pt<<endl; //输出p的地址
cout<<*pt<<endl; //输出p的值->a的地址
cout<<**pt<<endl; //输出a的值

在二重指针中, ∗ * 符号代表将指针指向上一个存储的值。

例:
pt存储的是pt的值,即p的地址;

*pt存储的是pt前一个的值——p的值,即a的地址。

**pt存储的是pt前一个的前一个的值——a的值。

指针和数组的关系

数组指针

注意不要将数组指针与二重指针弄混~

数组指针的简单操作,有三种赋值方法。

#include<bits/stdc++.h> 
using namespace std;

int main()
{
	int *p = NULL;//未赋值之前定义为NULL,否则野指针易造成内存泄露。
	//创建动态数组
	p = new int[20];
	
//1 
	for(int i=0;<10;i++)
	{
		cin>>p[i];
	} 
	
	for(int i=9;i>=0;i--)
	{
		cout<<p[i];
	}

//2 
	*p = 123;
	cout<<p[0];

//3
	for(int i=0;i<10;i++)
	{
		cin>>*(p+i);
	}
	
	for(int i=9;i>=0;i--)
	{
		cout<<*(p+i)<<" ";
	}
	return 0;
	
} 

字符串常量指针&指向字符数组的指针

注意二者不同处:

指向字符串常量的指针无法修改其内容,只能修改p指向什么位置。

指向字符数组的指针可以直接输入,并可以在输入后修改其内容

一些简单的操作:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	char s[] = "123456";
	
	char *p = "123456";//指向字符串常量的指针无法修改其内容
//	p[0] = 'x';报错 
	p = s; //只可以改变p保存的内容
	cout<<*p;//输出第一位 *(p+1)输出第二位 

	cout<<p; 
	
	char *q = new char[10];//指向字符数组的指针
	cin>>q;//可以直接输入 并在输入后修改其内容 
	cout<<q; 

	return 0;
}

结构体指针

注意结构体指针不能用Node.a之类,要用Node->a。

一些简单的操作:

#include<bits/stdc++.h>
using namespace std;

typedef struct node
{
	int a;
	string b;
	
}student, *L;//L是node类型的指针 

int main()
{
	L x = new student;
	
	cin>>x->a;//用指针创建变量 要用-> 不能用. 
	cout<<x->a;
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值