void指標 萬能指標

2021-07-05 03:57:20 字數 1262 閱讀 7985

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指標...