C ++ 指针 | 指针的操作_2

指针的操作

1、p+1

指针变量p,获取a变量的地址后,再加上1,结果会是什么? 直接上码:

#include<iostream>

int main()
{
    int a = 10;
    int *p;
    p = &a;
    std::cout << "p: " << p << "\n";
    std::cout << "p+1: " << p+1 << "\n";
}

运行结果:

结果解析:

答:注意结果后面的 44 和 48,为什么 p+1 后,44 变成 48 呢?这就是因为p是一个整型指针,p+1 则将其增加一个单位,将我们带到下一个整型地址,因为整数在内存的大小是4个字节。所以,去下一个地址,整数地址就会跳过四个字节,所以,p+1 将p增加四个字节。

你可以使用 sizeof(int); 来查看整型占用内存是多少! 或者试试字符类型,浮点型等等。

(在我之前文章有教这个sizeof()函数的使用)

2、*(p+1)

#include<iostream>

int main()
{
    int a = 10;
    int *p;
    p = &a;
    std::cout << "p: " << p << "\n";
    std::cout << "p+1: " << p+1 << "\n";
    std::cout << "*(p+1): " << *(p+1) << "\n";
}

 运行结果:

What happen?? *(p+1)等于2293316,这是什么?

答:p+1的地址已经改变了,然后执行*(p+1),也就是执行该地址的值,运行结果来看,实际上它是一个垃圾值,因为我们没有真正给它的整数,这是使用指针算法的C的一个危险的事情。使用指针操作,你可以达到任何地址,而有时这些操作可能会给你的程序带来不必要的行为。

int -> 4个字节

char -> 1个字节

float -> 4个字节

3、

p0 = (char*)p;   强转换指针类型

#include <iostream>

int main()
{
    int a = 2015;
    int *p;
    p = &a;
    std::cout << "size of integer is " << sizeof(int) << "\n";
    std::cout << "p: " << p << "\n";
    std::cout << "*p: " << *p << "\n";

    char *pp;
    pp = (char*)p;
    std::cout << "size of integer is " << sizeof(char) << "\n";
    std::cout << "pp: " << pp << "\n";
    std::cout << "*pp: " << *pp << "\n";
}

4、

无效指针 void

#include <iostream>

int main()
{
    int a = 2015;
    int *p;
    p = &a;
    std::cout << "size of integer is " << sizeof(int) << "\n";
    std::cout << "p: " << p << "\n";
    std::cout << "*p: " << *p << "\n";

    void *p0;
    p0 = p;
    //只能打印地址
    std::cout << "p0: " << p0 << "\n";
    //不能打印值
    std::cout << "*p0: " << *p0 << "\n";
}

5、

指向指针的指针 

#include<iostream>
using namespace std;

int main()
{
    int x = 5;
    int* p = &x;
    * p = 6;
    int** q = &p;
    int*** r = &q;
    cout << "*p =  " << *p << "\n";
    cout << "*q =  " << *q << "\n";
    cout << "**q = " << *(*q) << "\n";
    cout << "**r = " << *(*r) << "\n";
    cout << "***r = " << *(*(*r)) << "\n";
    ***r = 10;
    cout << "x = " << x <<"\n";
    **q = *p + 2;
    cout << "x = " << x << "\n";
}

运行结果:


算法和数据结构是程序的第一秘诀,缺之算法和数据结构是编程的最大原因。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值