指標有兩個屬性:指向變數/物件的位址和長度
但是指標只儲存位址,長度則取決於指標的型別
編譯器根據指標的型別從指標指向的位址向後定址
指標型別不同則定址範圍也不同,比如:
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
void指標 void 的用法
指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...
void指標 void 的用法
指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...
void指標 void 的用法
指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...