指针初步 1指针和变量的关系

  指针作为c语言的重点在使用的时候总会出现一些问题。在一些基础概念的地方甚至都会出现模糊,所以我这次对指针每个方面的问题都做了一些尝试和探索,希望可以帮到大家,同时帮助自己学习。

首先第一我们先来测试一些基础的部分。

一、关于初始化和赋值

第一步我们看一看指针和变量之间的关系。指针变量作为变量的一种它的内部应该也是存储一个值,那么它和普通变量有什么区别呢?因此我们分别把变量的地址和值赋给变量看看会出现什么情况:

代码附在这里

#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
    int a = 15; //首先创建一个变量并初始化
    int * pi;  //之后创建一个指针,来研究指针和变量的关系
    pi = a;    //首先尝试一下能不把值直接赋给一个指针
    cout << pi << *pi << endl;
}

我们发现如果单纯把15这个值赋给指针是不能成功的。即说明指针内存储的不是单纯的值。由定义我们知道指针主要作用是存储地址接下来我们看看将地址存入指针的情况:
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
    int a = 15; //首先创建一个变量并初始化
    int * pi;  //之后创建一个指针,来研究指针和变量的关系
    pi = &a;    //我们把地址赋给指针
    cout << pi << " " << *pi << endl;
}

这里使用了解引用符*,我们看到当我们把a的地址存入指针,我们就可以访问这段地址里的值。呢么我们可不可以直接把地址赋给变量呢?于是我做了这个尝试:

#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
    int a = 15; //首先创建一个变量并初始化
    int pi;  //创建一个普通变量
    pi = &a;    //我们把地址赋给这个变量
    cout << pi << " " << *pi << endl;
}

因此如果单纯的把地址赋给变量是不合法的,那么即可以理解为指针变量是专门为了存储地址和使用地址而创建的。翻阅书籍我们也发现的确如此。既然如此呢么指针变量本身是否存在地址呢?

#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
    int a = 15; //首先创建一个变量并初始化
    int * pi;  //之后创建一个指针,来研究指针和变量的关系
    pi = &a;    //我们把地址赋给指针
    cout << pi << " " << *pi  << " " << &pi <<  endl;
}


我们看到两个地址的值不同故引用的地址是pi指针本身的地址,由此可以理解指针变量作为一个变量内部存储了地址。即指针变量的地址和存储的地址是不同的。

猜你喜欢

转载自blog.csdn.net/happy_fakelove/article/details/79028413