初学C#,大家多多帮助,谢谢!
一段代码:
//cards为一个Card类型的数组。
cards = new Card[52];
for (int suitVal = 0; suitVal < 4; ++suitVal)
{
for (int rankVal = 1; rankVal < 14; ++rankVal)
{
cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal ,
(Rank)rankVal);
}
}
请问cards = new Card[52],这句会为这个数组分配内存吗?另外,cards[suitVal]
= new Card(),这句又会吗?我觉得两者都会,但是如果两者都会,是不是就意味
着开辟了两份内存?有没有什么办法尽开辟一份?谢谢!
一段代码:
//cards为一个Card类型的数组。
cards = new Card[52];
for (int suitVal = 0; suitVal < 4; ++suitVal)
{
for (int rankVal = 1; rankVal < 14; ++rankVal)
{
cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal ,
(Rank)rankVal);
}
}
请问cards = new Card[52],这句会为这个数组分配内存吗?另外,cards[suitVal]
= new Card(),这句又会吗?我觉得两者都会,但是如果两者都会,是不是就意味
着开辟了两份内存?有没有什么办法尽开辟一份?谢谢!
解决方案 »
- imageList增加图片时出现内存不足,求帮助!
- 哪位大虾实现过C#给RFC的表参数添加记录
- 请教如何用DataList控件和Repeater控件怎么实现对比效果??,,每两个进行对比。。急!!!
- 谁做过 crc8查表法校验啊 ~~~~
- 关于DataGridView,插入数据库问题!!!
- 请求大侠帮助:C#中调用VC写的DLL,显示窗口时出的问题,,,,谢谢
- 如何实现http下面的流媒体的拖放
- 求助 DataGrid的问题
- 请问如何读取 AT 指令 收到的关键字符
- treeView相关,献计献策了!!!
- static,virtual,override,abstract四个修饰符同一时刻只能出现一个,why?
- 控制台问题
用new就会分配内存
如果是:Card[] newDeck = new Card[52] { } ;这样才会分配内存?谢谢!
这句是根据Card是class或struct分配52*4或52*sizeof(Card)的内存(不分栈还是堆)
实际在.Net中,一个class对象的引用和一个struct对象占多少内存,鬼才知道(肯定一个指针不是4,而且"特性"会把这个数值搞得乱七八糟)
cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal ,
(Rank)rankVal);
不会分配内存(不过不是绝对,如果用抬杠的方式去谈论的话,那个所谓的Runtime不可能不存在不在堆中分配的可能)
struct的new和class的new有一个区别,就是,class的new会为这个obj分配一段内存空间,然后初始化这个类中的字段,但struct只是初始化这个类中的字段
比如,如果一个class重载了new,并用malloc后调用初始化函数,class是这样运行的,但struct不是,它是在栈上分配了他未被重载的sizeof的空间,然后直接调用初始化函数
对于C#中的struct的new,微软说的很明确了,这个语法只是初始化struct,(联机说明中有,原文是什么我记不清了);