C/C++ 指標和雙重指標以及三重指標. 指標在C語言內是一個很重要的元素,指標可以指到任何的位置,不過要小心使用,能指到記憶體位置,就代表可以透過 ...
2013/08/28
C/C++指標和雙重指標以及三重指標
指標在C語言內是一個很重要的元素,指標可以指到任何的位置,不過要小心使用,能指到記憶體位置,就代表可以透過指標去取得資料以及處理資料
不過有些方法也可以透過指標處理得很乾淨,例如Swap
在這邊我大概把之前學得,指標和雙重指標以及三重指標大概寫上來,以免哪天忘記
指標顧名思義就是指標
指標的宣告方式就是在變數前頭加上*,例如:
int*ptr;
int*ptr;
將變數加上&可取得到記憶體位置,例如:
intnum=100;
int*ptr=#
以上面的例子來說,ptr就是指向num所在的記憶體位置,但ptr也會佔有相同大小的記憶體位置
ptr->num
雙重指標也只是紀錄著指標以及指標指到的位置,例如:
intnum=100;
int*ptr=#
int**ptr2=&ptr;
ptr2->ptr->&num
三重指標也只是記錄著雙重指標內的位置,例如:
intnum=100;
int*ptr=#
int**ptr2=&ptr;
int***ptr3=&ptr2;
ptr3->ptr2->ptr->&num
範例:
#include
#include
intmain()
{
intnum=100;
int*ptr=#
int**ptr2=&ptr;
int***ptr3=&ptr2;
printf("num的值\t%d\n",num);
printf("num的位址\t%p\n",&num);
printf("透過ptr取得到值\t%d\n",*ptr);
printf("ptr指到num的位址\t%p\n",ptr);
printf("ptr記憶體位址\t%p\n\n\n",&ptr);
printf("透過ptr2取得到num值\t%d\n",**ptr2);
printf("ptr2指到ptr位址\t%p\n",*ptr2);
printf("ptr2指到ptr的記憶體位置\t%p\n",ptr2);
printf("ptr2記憶體位址\t%p\n\n\n",&ptr2);
printf("透過ptr3取得到num值\t%d\n",***ptr3);
printf("ptr3指到ptr位址\t%p\n",**ptr3);
printf("ptr3指到ptr的記憶體位置\t%p\n",*ptr3);
printf("ptr3指到ptr2的記憶體位置\t%p\n",ptr3);
printf("ptr3記憶體位址\t%p\n\n\n",&ptr3);
system("pause");
return1;
}
執行結果:
用指標時切記要小心指到不該指的,雖然方便,不過在學習上當然還是會很抽象
有錯麻煩大神糾正,謝謝
參考資料:
http://www.slideshare.net/shademoon/08-3475335
http://blog.sina.com.tw/erzengel/article.php?pbgid=115834&entryid=613476
http://openhome.cc/Gossip/CGossip/DoublePointer.html
http://pydoing.blogspot.tw/2010/09/c-ch0611.html
http://nknucc.nknu.edu.tw/~jwu/c/cpgch4.htm
http://www.eskimo.com/~scs/cclass/int/sx8.html
http://stackoverflow.com/questions/5814646/c-double-pointer
http://nknucc.nknu.edu.tw/~jwu/c/cpgch4.htm
圖片資料:
http://ezgo.coa.gov.tw/graph/spots/H_CHINHUA_20081104173334/H_CHINHUA_20081104173334_general_000004s2.jpg
於
8月28,2013
以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest
標籤:
C,
C++
沒有留言:
張貼留言
較新的文章
較舊的文章
首頁
訂閱:
張貼留言(Atom)
標籤
.NetCore
上課心得
英文
食記
留學
開箱
黑蘋果
當兵這回事
經歷
腦立方
演算法
聚會心得
線性代數
ActiveDirectory
Adobe
AJAX
Android
AndroidStudio
AngularJS
Apache
Architecture
Arduino
ASP.Net
ASP.NETCore
AWS
Batch
BingMapsAPI
BIOS
BootCamp
Bootstrap
C
C#.Net
C++
CentOS
CertBot
Cisco
Corel
Corsair
CSS
cygwin
D3.js
Datastructure
DataGrip
Debug
DHCP
Django
DNS
Docker
Dropbox
Drupal
EmguCV
Estinet
Facebook
Fedora
FirefoxOS
FreeBSD
Ftp
Git
Go
GoogleAppsScript
GoogleChartAPI
GoogleChromeExtensionsAPI
GoogleContact
GoogleForm
GoogleMapsAPI
Hackpad
Haskell
Heroku
HRV
HTML5
Hyper-V
IOS
iPhone
iReport
iTunes
Java
JavaEE
JavaFX
JavaScript
Jenkins
JetBrains
jQuery
JSP
Juniper
KINECT
Laravel
LINQ
Linux
MANP
Matlab
Maven
MFC
MicrosoftOffice
mininet
Mint
MQTT
MySQL
NAS
NDK
ndk-build
Network
NextCloud
Nginx
Node.js
Nuget
Object-C
OpenCart
OpenCV
OpenData
OpenFlow
OpenGL
OpenKM
OpenWRT
OSX
PHP
PhpStorm
PostgreSQL
PowerShell
Python
RaspberryPi
Razor
React.js
Redis
RoS-BOT
RouterOS
Ruby
Snap
SocialAPI
SolidWorks
SQLite
SSL
Stream
SublimeText
Swift
Synology
Testing
Tomcat
Tools
Ubuntu
UEFI
UML
UVa
VC
VisualStudio
VisualStudioCode
VMware
Vue.js
W7
WarGame
WinAPI
Windows
Windows10
Windows10IoTCore
WindowsAPI
WindowsPhone7
WordPress
WPF
Xcode
XNA
YAML
Youtube
YQL
Zabbix
熱門文章
C#.Net使用Chart繪製折線圖
先在工具箱找到Chart,拖曳至表單上並將預設的序列刪除程式碼:usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;usingSystem.Windows.Forms.DataVisu...
透過JavaScript讓HTML頁面互相傳值
最近在想如何將值傳遞到另一個網頁,大二有學過用PHPPost以及Get方式去傳遞不過想嘗試用JavaScript傳遞,就上網找了一下方法參考『在HTML頁面之間傳遞參數』文章,是透過JavaScript去分析網址內的內容,將內容的值取出來我以該篇文章作為基礎,...
warning :找不到v142的建置工具
昨天幫學弟寫了C++的功課,傳給他之後跟開不起來昨天剛好在更新VS2019的更新,讓VS無法找到V142的建置工具,所導致的首先對專案按右鍵,屬性將平台工具組從V142改為其他的,按下確定
線性代數高斯消去法高斯-喬丹消去法
為了考碩士,去旁聽電通系張偉德老師的線性代數他在課堂上解聯立方程式是一步一步的解,讓連我這種健忘的人也能學會用的是國中方式一條線有無限多個點,當兩條線有一點交集則有一組解
C#.Net使用Chart繪製長條圖
程式碼:usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;usingSystem.Windows.Forms.DataVisualization.Charting;namespaceSam...
聯絡我?