指針作爲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指針本身的地址,由此可以理解指針變量作爲一個變量內部存儲了地址。即指針變量的地址和存儲的地址是不同的。