C C void 指向指標的指標 範例對比

2021-07-23 06:07:46 字數 1813 閱讀 1172

一開始在福富實習,根據導師給的參考樣例第一次接觸到void*無型別引數;

在做資料結構的題中偶然嘗試void傳遞,遇到了指標的指標與預想不一樣的結構,於是就研究了一天。

終是知道問題所在。

每個變數都會有乙個位址,而指標變數也會有乙個位址。

所以對於指標變數

int*me;//顯然&me型別是int**,me型別是int*;*me型別是int;

int m;//&m型別int*;m型別int;

傳遞int**只能改變int*和int

傳遞int*只能改變int

傳遞int不能改變

note:

void沒有引數

void*無型別引數

不檢查型別,無論void*還是void**都一樣作用,可互相賦值

使用需要給定型別或者單位長度,詳情memcpy原始碼樣例

void* memcpy(void* dest, void* source, size_t count)

****************************************=

第乙個例子符合想要的結果。每次new完,主函式中的p指向就被被改變了;(mypoint**)正好是強制轉換獲得儲存mypoint位址的指標;

而後前面**星*,標識更改指標所儲存的mypoint位址;

/*輸入檔案示例

33 1 3 2

3 5 4 6

2 8 7

輸出檔案示例

18 18

21 3

3 2 7 1

*/#includeusing namespace std;

struct mypoint

};int deletenode(void*nowp)

void newnode(void*before,void*intnode,int index)

coutnext);

delete head;

for(i=0;i

最初的**,顯然每次new子函式裡面,形參before改變,但是主函式的p沒有被改變

#includeusing namespace std;

struct mypoint

};int deletenode(void*nowp)

void newnode(void*before,void*intnode,int index)

{ mypoint*hd,*tmp;

tmp=new mypoint(0,index-1);

tmp->array=(int*)intnode;

hd=(mypoint*)before;

tmp->next=hd->next;

tmp->pre=hd;

hd->next->pre=tmp;

hd->next=tmp;

cout<<"in_func&before"<<&beforetcout<<""<<((mypoint*)before)->tthead->pre=head;

int n,i,j,temp;

///*****===read

cin>>n;

ck=new int*[n];

j=n;

while(j--)

{ cin>>temp;

ck[j]=new int[temp];

cout<<"main &p"<<&p<>ck[j][i];

if(i<=midindex)

p->sf+=ck[j][i];

p->so+=ck[j][i];

coutnext);

delete head;

for(i=0;i

c c void及void指標型別

c c void及void指標型別 1.概述許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並詳述void及void指標型別的使用方法與技巧。2.void的含義void的字面意思是 無型別 void 則為 無型別指...

指向指標的指標

理解二級指標,關鍵是理解指標的儲存方式和意義。這裡以指向int型指標的指標為例,梳理一下二級指標在記憶體分配中 的奧妙.include using namespace std int main int p a int point p cout a a endl p p endl p p endl p...

指向指標的指標

這幾天我下意識地琢磨到底 錯了,今天猛然明白了他的想法,其實這個技術點我早已掌握,只是當時對問題未深入思考,把握得較模糊,一時沒洞察他的思路,疏忽了。問題大概是這樣的 寫乙個函式,將乙個二維陣列作乙個變換。void rotate array 開闢備份空間 根據變換要求將元素一一賦值 因為這個方法並不...