2022.3.10

1、指针学习

(1):*在指针中有两种用法

一是用于定义指针

int * iPtr;

二是用于可执行语句中的指针之前,为间接引用操作符;

int* iPtr;
int iCount=10;
iPtr=&iCount;//将地址赋值给存放地址的指针
cout<<*iPtr<<endl;//间接引用指针

运行结果为

18

观察如下代码:

#include<iostream>
using namespace std;
int main(void)
{
	int icount = 18;
	int*iPtr = &icount;
	*iPtr=58;//相当于即使上边定义了icount的值为18
	         //但是由于给*iPtr赋值为58,所以覆盖了原来的18,相当于又定义了icount=58 
	cout<<icount<<endl;
	cout<<iPtr<<endl;
	cout<<&icount<<endl;//与iPtr的值相等 
	cout<<*iPtr<<endl;//与icount的值相等 
	cout<<&iPtr<<endl;//指针本身的地址(既二级指针) 
}

运行结果为

58
0x70fe1c
0x70fe1c
58
0x70fe10
int count;
int* iPtr;
*iPtr=58;

指针定义时一定记得初始化 没有赋初始值的指针是一个随机地址。*iPtr是把58赋到内存中的随机位置,这样将改写另一存储位置的数值,甚至修改了栈中的函数返回值,计算机将死机或进入死循环。

将浮点类型指针赋值给整型类型指针会导致隐式类型转换

见如下代码

float f=34.5;
float* fPtr=&f;
int* iPtr=&f;//会导致

cout<<f<<endl;
cout<<fPtr<<endl;
cout<<iPtr<<endl;
cout<<*fPtr<<endl;
cout<<*iPtr<<endl;

*iPtr=*fPtr;
cout<<f<<endl;
cout<<*fPtr<<endl;
cout<<*iPtr<<endl;

运行结果为

34.5
0x0067:fdfc
0x0067:fdfc
34.5
1107951616



4.7644le-44
4.7644le-44
34

*iPtr=*fPtr时,由于iPtr是整型,故只会取整。

(2):指针与数组

数组名本身,没有方括号和下标,它实际上是地址,表示数组起始地址。
数组名就是数组第一个元素地址。
a=&a[0];

存在下列两条等价关系

a[i]=*(a+i)=iPtr[i]=*(iPtr+i)

下表操作是针对地址而不仅仅是针对数组名,所以iPtr[i]也表示第i个元素的值

&a[i]=a+i=iPtr+i=&iPtr[i]

2.编程规范

使用new函数之后在输出之前要用delete[]释放内存。

sum+=*iPtr;
iPtr++;
等效于
sum+=*iPtr++;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值