C#指针操作

hez2010 2018-05-30 12:12:55
求问大家这个输出为什么不是1~100,而是一段一段的中间还夹杂一堆野值。
using System;
using System.Runtime.InteropServices;

namespace test
{
class Program
{
static unsafe void Main(string[] args)
{
int[][] p = new int[10][];
var r = 0;
for (int i = 0; i < 10; i++)
{
p[i] = new int[10];
fixed (int* j = p[i])
{
for (int x = 0; x < 10; x++)
{
*(j + x) = ++r;
}
}
}
fixed (int* i = p[0])
{
for (int j = 0; j < 10 * 10; j++)
{
Console.Write($"{*(i + j)},");
}
}
return;
}
}
}


实际上输出是:
1,2,3,4,5,6,7,8,9,10,0,0,-2086078320,32766,10,0,11,12,13,14,15,16,17,18,19,20,0,0,-2086078320,32766,10,0,21,22,23,24,25,26,27,28,29,30,0,0,-2086078320,32766,10,0,31,32,33,34,35,36,37,38,39,40,0,0,-2086078320,32766,10,0,41,42,43,44,45,46,47,48,49,50,0,0,-2086078320,32766,10,0,51,52,53,54,55,56,57,58,59,60,0,0,-2086078320,32766,10,0,61,62,63,64,
...全文
413 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hez2010 2018-05-30
  • 打赏
  • 举报
回复
明白了,谢谢楼上各位
CyberLogix 2018-05-30
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
int[][]是数组的数组,对于一个数组来说,和C++不同的是,C#会在内存里存储数组的长度和类型。 所以数组的数组不能像C++那样连续访问内存得到,因为中间有的内容不是数组本身。
这个回答正确,使用指针的话你要明白数组里面到底是怎么实现的,每个地址都存放的什么东西
大鱼> 2018-05-30
  • 打赏
  • 举报
回复
C# 中不建议使用指针,而且更加不建议使用fixed
threenewbee 2018-05-30
  • 打赏
  • 举报
回复
int[][]是数组的数组,对于一个数组来说,和C++不同的是,C#会在内存里存储数组的长度和类型。 所以数组的数组不能像C++那样连续访问内存得到,因为中间有的内容不是数组本身。
qq14923349 2018-05-30
  • 打赏
  • 举报
回复
指针很容易出现乱指的 内存使用前必须分配好

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧