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";
}

运行结果:


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

猜你喜欢

转载自blog.csdn.net/sw3300255/article/details/84890925