指針存儲
① C語言中指針變數只能存儲地址
指針變數是一個變數,它保存的是另一個變數的內存地址。你如果知道了這個指針變數保存的值,就可以知道它所指向變數的內存地址,於是就可以間接訪問到那一個變數。
定義:指針變數類型
*指針變數名1,
*指針變數名2,
...
;
例如:
int
main(void)
{
int
*p;
/*定義*/
int
a;
p
=
&a;
/*把a的地址賦值到p中*/
*p
=
1;
/*間接訪問a*/
return
0;
}
把指針作為函數的參數傳遞,可以使函數可以訪問函數外部的變數,例如:
void
swap(int
*a,
int
*b)
{
int
c;
c
=
*a;
*a
=
*b,
*b
=
c;
}
指針也可以用於傳遞數組,數組名本身就是一個指針:
void
func(int
a[],
int
n)
{
.....
}
指針還可以指向指針,指向結構體(struct),指向數組
int
**p;
/*指向int指針*/
struct
xxx
*p;
int
(*p)[100];
/*指向一個int[100]數組,括弧不可少*/
② 指針的存儲類型和數據類型的意義是什麼
1.定義指針指定的數據類型是指指向數據的類型,並不是指針的類型,指針的數據類型是內存地址類型。
2.之所以定義指針時指明它指向數據的類型,是因為有些數據類型不能進行某些操作(運算),比如兩個char相乘(或相除)沒有任何意義。假如說定義指針時不需要指明它指向數據的類型,那麼有指針p1和p2,那麼(*p1)*(*p2)在不知道p1和p2指向的數據類型時就不能保證它對數據類型運算的限制了;
3,如果你只是想用指針保存一下數據的內存地址而不去對它進行運算你可以定義void類型的指針,它能指向任何數據類型,但是他不能進行任何運算。
另外你看下C++ Primer這本書,他對指針說明的很詳細
③ 請通俗一點的講講指針是怎麼存儲的
指針是存儲內存地址的變數,只是一種變數而已
就像int的變數存儲整形
就像float的變數存儲浮點形
就像char的變數存儲字元形
就像double的變數存儲高精度浮點形
char *,int *,float* 定義的指針都是一樣的,用來存放內存地址.一般來說可以存儲2^32次方那麼大的內存地址.
之所以有那麼多類型的指針是方便寫代碼,同時支持指針的自我加減操作.
最終的操作都是轉化成void*的指針來操作
假設你要讀取內存地址為0x5201314的那塊內存 void *p = 0x5201314;
cout<<(int)*p;//讀取4個位元組
cout<<(char)*p;//讀取1個位元組
。。。。。。
④ C語言當定義一個指針是如何存儲的
在 C 語言中,將內存單元的編號或地址稱為指針。可通過一個變數來存放指針,這種變數稱為指針變數。因此,一個指針變數的值就是某個內存單元的地址,或稱為某內存單元的指針。它與其他一般變數所不同的是,一般的變數包含的是實際的、真實的數據;而指針只是一個指示器,它告訴程序在內存的哪塊區域可以找到數據。
⑤ 在C語言中一個指針佔用多少位元組。
指針即為地址,指針幾個位元組跟語言無關,而是跟系統的定址能力有關。譬如以前是16為地址,指針即為2個位元組,現在一般是32位系統,所以是4個位元組,以後64位,則就為8個位元組。
(5)指針存儲擴展閱讀:
1)指針的含義
指針不同於一般變數,存的是變數的地址,在同一架構下地址長度都是相同的(cpu的最大定址內存空間),所以不同類型的指針長度都一樣比如說一個char1位元組,可以存在0x0,也可以位於0xFFFFFFFF,比如你的32位系統。
2)指針的范圍
指針長度為4,在64位操作系統下那麼就都是8了,而和char佔用1位元組還是100位元組無關,指針的范圍只和機器字和系統有關。
3)變化的范圍
如果你輸出的是444,說明指針長度為4位元組可以記錄的地址范圍是0x00000000~0xFFFFFFFF,這個范圍才是指針變數的值。
4)指針的介紹
指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的類型、指針的值或者叫指針所指向的內存區、指針本身所佔據的內存區。
⑥ 請問指針在內存中如何存儲的
和普通變數一樣存儲。32位機器是4位元組,64位機器是8位元組。
⑦ 指針是如何被存儲到硬碟上的
就如鏈表等數據結構一樣,他只需要定義一個指針(如*P),如果他要下一個,只要知道(P->NEXT)就可以了,不用知道確切地址的,磁碟里的程序就是按這種方式儲存的(一部分),一但程序裝入了內存,分配了空間,那麼指針才真正生效
⑧ 指針能儲存多個值嗎 可以把整個數組都儲存到一個指針裡面嗎
問這個問題,說明你根本還不知道什麼是指針,一個指針只能存放一個地址,這個地址是一個數據在內存中的地址,因為數組裡面的數據在內存中是連續存放的,所以用一個指針指向數組的首地址,要訪問數組第二個元素,可以將指針後移一位,
比如說
int iArray[10];
int *p = iArray;(數組名即表示數組的首地址)
for(int i = 0; i < 10; i++)
{
*(p + i) = i; //(指針向後偏移 i 位)
cout<<iArray[i]; //(0,1,2,3,4,5......,9)
}
⑨ 指針存儲器和變址存儲器的區別
指針用來指向一個地址。使用這種定址方式的優點在於可以在程序運行過程中實現變址。 指針用於存儲器間接定址