C 中指標使用總結

2022-07-09 07:18:13 字數 2397 閱讀 4776

一、vs2010中開啟unsafe code 的方式

unsafe

然後再專案上點選滑鼠右鍵,選擇「屬性」,在「生成」選項卡中選中「允許不安全**」

struct(結構體),結構體中只能包括非託管型別。

操作符說明

*取值運算子

&取址運算子

->

通過指標處理結構體中的資料(獲取或賦值)

++與–

指標增、減操作

fixed

使用者暫時固定託管**中引用型別的位置。

stackallc

分配記憶體

例如分配記憶體

char* cptr = stackalloc

char[26

];for (int i = 0; i < 26;i++)

for (int i = 0; i < 26;i++)

:",(int)&cptr[i],cptr[i]));

}

至於釋放記憶體,我在msdn上搜尋了一下,c#並沒有提供釋放記憶體的函式。而msdn給的解釋是:分配的記憶體會在方法結束後自動釋放。

fixed的應用會在下面的類與指標中做說明。

定義指標

說明int* p

整形指標

int** p

指向整形指標的指標

char* c

指向字元的指標

int* arr

整形一維陣列指標

五、指標的使用

1.整形指標的使用

int i=10

;int* iptr = &i; //

將i的位址賦值給iptr

console.writeline((int)&iptr); //

取iptr得位址

console.writeline(*iptr); //

取iptr指向的值

2.結構體指標

struct

location

unsafe

static

void main(string

args)

,lptr位址,lptr值

",(int)&location,(int)lptr,*lptr));

console.writeline(

string.format("

location.x的位址,location.x的值

",(int)&(lptr->x),lptr->x));

console.writeline(

string.format("

location.y的位址,location.y的值

", (int)&(lptr->y), lptr->y));

}

以上**輸出結構體的位址和值。我們在操作位址時,可以直接看到結構體的記憶體分配。

3.指標與引數

public

static

unsafe

int* add(int* x,int*y)

int i = 2, j = 3

;console.writeline(*add(&i,&j));

4.類與指標

class

people

}people people = new

people();

people.age = 10

;fixed(int* ageptr=&people.age)

people.showage();

//11

通過以上的方法,我們可以操作值型別,也可以獲得值型別的位址。但如何獲取類的記憶體位址?我們可以使用gchandle,來自system.runtime.interopservices命名空間。gchandle提供從非託管記憶體訪問託管物件的方法。如下:

object p = new

people();

gchandle h =gchandle.alloc(p, gchandletype.pinned);

intptr addr =h.addrofpinnedobject();

console.writeline(addr.tostring());

h.free();

C 中指標使用小結

1 宣告指標 typename pointername 2 給指標賦值 對變數名用 運算子,來獲得被命名的記憶體的位址,new運算子返回未命名的記憶體的位址。3 對指標解除引用 對指標應用解除引用或間接運算子 來解除醫用 4 陣列名 陣列名被視為陣列第乙個元素的位址,但是陣列名為常量,不能修改它的值...

C 中指標的使用藝術

在c 程式設計中使用指標能有速度快,節約記憶體等優點,是很多c 程式設計師的最愛。但指標是一把雙刃劍,用好了它,你就會發現指標有多麼的方便,反之,你可能就頭疼了,往往會出現意想不到的問題。一 什麼是指標 其實指標就像是其它變數一樣,所不同的是一般的變數包含的是實際的真實的資料,而指標只是乙個指示器,...

c 中指標與引用的使用

先說結論 使用指標的情況 使用引用 它們的異同 相同點 不同點char pc 0 char rc pc 引用指向空值string s1 foo string s2 bar string rs s1 string ps s1 rs s2 rs仍引用s1,實際是把s2賦值給s1,所以s1現在的值是 ba...