一開始在福富實習,根據導師給的參考樣例第一次接觸到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 開闢備份空間 根據變換要求將元素一一賦值 因為這個方法並不...