i=0
i=1
px2[0]=1
px2[0]=101
p2:3,x2:201,3,8
px2 convert to nint value:176251454976
px2 convert to nuint value:176251454976
px4[0][0]:4
px4[0][0]:5
px4[0][0]:6
px4_1[0]:4
px4_1[1]:5
px4_1[2]:6
*px4[0]:4
*px4[1]:5
*px4[2]:6
x4:4,5,6
x4:5,5,6
C#指针又学到两个新东西,注意避坑,分享 ,1: *t 和 t[0] 等价; 2: fixed 里 p[0] == fixed 外的 p[0][0]亦即(*p)[0] ;fixed(T* p=arr) 外面只能写成 T*p=&arr; 3: T* p; p+=1 ; 相当于 (nint)p+=sizeof(T); 4: 对于通过nint/nuint来进行指针赋值的时候要这样写 "*(T*)nintValue " 这种写法可以赋值也可以取值
C# 指针冷知识: 1,T* p = &arr; 在fixed(T* p= arr){/*...*} ; 2, *p 也可以写成 p[0]; 3, 与 nint/nuint 互相转换, p+=1; 相当于 (nint)p+=sizeof(T);
var p=new int[]{1,2,3} ; 相当于 int[]* p=new int[]{1,2,3}; 在fixed外,不能够 int* p=arr[0]; 要在fixed里面; 而 C#的 malloc 是 NativeMemory.Alloc(n); 从这里可以直接返回一个 void* 可以转成 任务指针, 象基础byte* 所以 byte* p 可以直接 p[i] 进行愉快的运算,而 若是 在 T[]* p 的话 需要先 p[0] 或 *p 再 索引 就是 p[0][i] 或(*p)[i] 有点烦索