C++中的指针1

C++中的指针1

如果声明指针的时候,没有确切的地址可以赋值,最好为这个指针赋为NULL,这样指针指向内存地址为0的地址,内存地址为0是不可被访问的,可以避免一些难以预料的错误。

一、代码中的基础符号

直接以一段代码为例子:

# include <iostream>
using namespace std;

int main(){
    int value = 20;
    int *ip; // 声明一个地址变量,加个*表示ip是一个地址变量,ip也就是我们说的指针变量
    ip = &value; // 用&符号取得value这个变量的地址,然后赋这个地址给ip
    *ip = 0; //将ip这个地址对应的值改为0,也会改变value的值
    cout << "the value of ip:" << ip << endl;
    cout << "the value of *ip:" << *ip << endl;
    cout << "the value of value: " << value << endl;
    return 0; 
}

结果:

the value of ip:0x61fe14
the value of *ip:0
the value of value: 0

分析:

*符号代表从一个地址变量中取出这个地址对应的值,像这段代码中,ip这个变量对应了一个地址, *ip则表示从ip表示的这个地址中取出对应的值

&符号代表从一个变量中取出这个变量对应的地址,像这段代码中,ip = &value,就是将value这个变量的地址赋给ip这个变量,然后ip和value对应的地址就是共命运同呼吸了,也就是value的值改变了,从ip从取出来的*ip的值也会随着改变。

二、指针运算

一个地址代表一个字节(8bit),而像int类型的变量占4个字节,按理说一个int变量需要四个地址来存储啊?

答:这里的地址只会返回变量第一个字节的地址。

指针可以进行加减运算和比较运算,不过加减运算一定要考虑指针类型!

1、加法运算

假设ptr是一个指针变量,那么ptr++的结果和这个指针变量的类型有关

int* ptr;
ptr++就表示地址的数值+4,因为int类型占四个字节,一个地址代表一个字节;
ptr = ptr+4;这个就表示地址的数值+(4x4)=16,这里ptr为int类型的指针变量,所以+4代表指针ptr向后移4个int类型元素的大小
char* ptr;
ptr++就表示地址的数值+1,因为char类型只占一个字节;
2、减法运算

指针之间的减法运算可以计算两个指针之间的元素个数,而不是数值上的差。

int* ptr1 = 0x61fe10
int* ptr2 = 0x61fe18
ptr2-ptr1的结果是等于2的,并不是8,这个要注意,因为这两个指针都是int类型指针
那不同数据类型的指针进行减法运算会出现什么样的结果呢?-->会报错
test8.cpp: In function 'int main()':
test8.cpp:11:33: error: invalid operands of types 'double*' and 'int*' to binary 'operator-'
     cout << "ptr2-ptr1=" << ptr2-ptr1 << endl;
3、比较运算

可以用==、!=、<、<=、>、>=等比较符号对指针进行比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值