void指標
指標型別強制轉換,只是改變了指向物件記憶體大小,而位址沒有變化。
指標有兩個屬性:指向變數/物件的位址和長度
但是指標只儲存位址,長度則取決於指標的型別
編譯器根據指標的型別從指標指向的位址向後定址
指標型別不同則定址範圍也不同,比如:
int*從指定位址向後尋找4位元組作為變數的儲存單元
double*從指定位址向後尋找8位元組作為變數的儲存單元
1.void指標是一種特別的指標
void *vp
//說它特別是因為它沒有型別
//或者說這個型別不能判斷出指向物件的長度
2.任何指標都可以賦值給void指標
type *p;
vp=p;
//不需轉換
//只獲得變數/物件位址而不獲得大小
3.void指標賦值給其他型別的指標時都要進行轉換
type *p=(type*)vp;
//轉換型別也就是獲得指向變數/物件大小
** 4.void指標不能復引用
*vp//錯誤
因為void指標只知道,指向變數/物件的起始位址
而不知道指向變數/物件的大小(佔幾個位元組)所以無法正確引用
5.void指標不能參與指標運算,除非進行轉換
(type*)vp++;
//vp==vp+sizeof(type)
#include
#include
#include
using namespace std;
typedef struct tag_st
st;
//我在程式裡面這樣使用的
int main()
{st * p=(st *)malloc(sizeof(st));
strcpy(p->id,"hello!");
p->fa[0]=1.1;
p->fa[1]=2.1;
st * q=(st *)malloc(sizeof(st));
strcpy(q->id,"world!");
q->fa[0]=3.1;
q->fa[1]=4.1;
void ** plink=(void **)p;
*((st *)(plink)) = * q; //plink要先強制轉換一下,目的是為了讓它先知道要覆蓋的大小.
//p的內容竟然給q的內容覆蓋掉了.
cout其他**:
智慧型指標和萬能指標
智慧型指標 智慧型指標 smart pointer 是儲存指向動態分配 堆 物件指標的類。除了能夠在適當的時間自動刪除指向的物件外,他們的工作機制很像c 的內建指標。智慧型指標在面對異常的時候格外有用,因為他們能夠確保正確的銷毀動態分配的物件。他們也可以用於跟蹤被多使用者共享的動態分配物件。智慧型指...
1 5 萬能指標 id
id是一種資料型別,並且是一種動態資料型別 資料型別的用途 1.定義變數 2.作為函式的引數 3.作為函式的返回值 預設情況下所有的資料型別都是靜態資料型別 靜態資料型別的特點 在編譯時就知道變數的型別,知道變數中有哪些屬性和方法 在編譯的時候就可以訪問這些屬性和方法 並且如果是通過靜態資料型別定義...
萬能的指標
void指標 void指標一般被稱為通用指標或泛指針,它是c語言關於 純粹位址 的一種約定。void指標指向某個物件,但該物件不屬於任何型別。請看下例。int ip void p 在上例中,ip指向乙個整型值,而p指向的物件不屬於任何型別。在c語言中,任何時候都可以用其他型別的指標來代替void指標...