前言:什麼是指針?
每個變量名在運行時都要對應一塊內存地址。
int a=5; //a的地址是1000 內存: 1000-1003 4字節
int* p; //p的地址是2000 內存: 2000-2007 8字節
p=&a;
p變量的變量空間2000-2007裏存放了a的地址1000
p的空間和p所指的空間含義不同,前者是2000-2007,後者是所指空間的首地址1000
這也就引出了一個問題:如何從指針的首地址後讀取數據 -> 指針有類型的原因
int* p; 說明了從指針所指的地址後如何讀取數據,比如此就是從1000開始讀取4個字節
to be short 指針變量p的空間存的是指針變量p的地址,p的值就是a的內存空間的首地址
#include <bits/stdc++.h>
using namespace std;
typedef int ty;
int main()
{
ty a=20;
ty* p;
p=&a;///將模塊a的地址賦給指針變量p
cout<<"指針變量p的空間地址是:"<<&p<<endl;
cout<<"指針的大小是:"<<sizeof p<<endl;
cout<<"指針變量p的值是:"<<p<<endl;
cout<<"a的空間首地址是:"<<&a<<endl;
cout<<"指針變量p所指的空間的值是:"<<*p<<endl;
cout<<"a的值是:"<<a<<endl;
return 0;
}
指針常量與常量指針
#include <bits/stdc++.h>
using namespace std;
int main()
{
const int b=5;
int a=10;
///int * const p=&a;///指針常量,需要開始就賦值,指向誰不能更改,但可以更改a的值
int const *q;///常量指針:可以理解爲指向常量的指針,指針可以改變,指向的值不能改變 無法通過常量指針修改a的值(a是變量時)
q=&a;
cout<<*q;
return 0;
}
///指針的介紹,常量指針和指針常量
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
int main(){
///首先要明確:每個變量運行時都對應一塊內存地址
int a=5;///假設a的地址是1000,所佔的內存爲4個字節,即從1000~1003
int* p=&a;///假設p的地址是2000,所佔的內存是8個字節,即從2000~2007
///指針變量p的值是存儲的a的空間首地址
///p的空間是2000~2007,p所指的空間是a的首地址1000
cout<<"指針變量p的空間地址是:"<<&p<<endl;
cout<<"指針的大小是:"<<sizeof p<<endl;
///這也就引出了一個問題:指針如何從首地址後讀取數據
///根據*p的類型決定從指針讀取數據的方式,比如int* p表示從記錄的首地址往後讀取4個字節的數據
cout<<"指針變量p的值是:"<<p<<endl;
cout<<"a的空間首地址是:"<<&a<<endl;
cout<<"指針變量p所指的空間的值是:"<<*p<<endl;
cout<<"a的值是:"<<a<<endl;
///接下來介紹一下指針常量和常量指針
const int b=5;
int c=10;
///指針常量
///可以理解爲const 修飾指針,所以需要開始就賦值,指向誰也不能更改,但是可以通過其他方式更改c的值
int * const q=&c;
cout<<*q<<endl;
c=110;
cout<<*q<<endl;
///q=&a;
///常量指針
///可以理解爲“常量”的指針,這裏的常量指的是無法通過指針修改a的值,可以不用初始化
int const *w;
w=&b;
cout<<*w<<endl;
///*w=1001;
return 0;
}