我正在修改一些代码并遇到一个声明,我无法理解:
int *userMask[3][4] = {0};
Run Code Online (Sandbox Code Playgroud)
究竟是什么指向?它是一个矩阵,每个元素都是指针吗?或者它指向一个大小的矩阵[3] [4]?
谢谢
我想我的问题是userMask[2][maskElement][user]当声明为什么时可以工作int.userMask不能让它int[]正常工作吗?我不能理解这个权利......
请注意,感谢您对cdecl Robert的建议.但是,有没有人知道如何在XP命令提示符中使用它?我只能得到语法错误:(
在C编程语言中,我的理解是变量只能在代码块的开头定义,而变量将具有声明它的块的范围.考虑到这一点,我想知道它是否是被认为是人为地创建新范围的不良做法,如下例所示:
void foo()
{
... Do some stuff ...
if(TRUE)
{
char a;
int b;
... Do some more stuff ...
}
... Do even more stuff ...
}
Run Code Online (Sandbox Code Playgroud)
假设在宏定义中将TRUE设置为1,这段代码是否会被认为是"好代码",或者是否会使经验丰富的程序员在想到它时感到畏缩?
感谢您的输入!
编辑:为了回应一些答案,我正在使用的代码需要与一些非常古老的遗留系统一起工作.虽然按照C99的假设进行操作会很好,但我们真的无法保证他们会拥有它.
我试图存储在运行时确定的大量布尔信息.我想知道最好的方法是什么.
我目前一直在尝试使用以下方式分配内存:
pStatus = malloc((<number of data points>/8) + 1);
认为这会给我足够的工作量.然后我可以使用数组表示法中的指针引用每个布尔值:
pStatus[element]
不幸的是,这似乎并不是很好.首先,我很难将内存初始化为整数值0.这可以用memset()吗?尽管如此,我认为这不会影响我尝试访问时崩溃的原因pStatus[element].
我也不完全相信这种方法是最好的方法.我真正想要的本质上是一个反映布尔值状态的巨型位掩码.我错过了什么吗?
我一直试图弄清楚这些构造函数之间是否存在任何差异.假设有一个不带参数的Foo()构造函数,所有这些构造函数都会有相同的结果吗?
public Foo()
: this()
{
blah;
blah;
blah;
}
Run Code Online (Sandbox Code Playgroud)
public Foo()
{
this();
blah;
blah;
blah;
}
Run Code Online (Sandbox Code Playgroud)
public Foo()
{
this = new Foo();
blah;
blah;
blah;
}
Run Code Online (Sandbox Code Playgroud) 我正在努力找到一种方法来创建我想要使用C#的Forms功能.
基本上,我想要一个具有指定超时时间的模式对话框.看起来这应该很容易,但我似乎无法让它发挥作用.
一旦我打电话this.ShowDialog(parent),程序流程就会停止,如果没有用户第一次点击按钮,我就无法关闭对话框.
我尝试使用BackgroundWorker类创建一个新线程,但我不能让它在另一个线程上关闭对话框.
我错过了一些明显的东西吗?
感谢您提供的任何见解.
我有一个特殊的方法偶尔崩溃与ArgumentException:
Destination array was not long enough. Check destIndex and length, and the array's lower bounds.:
at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
at System.Collections.Generic.List`1.CopyTo(T[] array, Int32 arrayIndex)
at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
at System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection)
Run Code Online (Sandbox Code Playgroud)
导致此崩溃的代码如下所示:
List<MyType> objects = new List<MyType>(100);
objects = FindObjects(someParam);
objects.AddRange(FindObjects(someOtherParam);
Run Code Online (Sandbox Code Playgroud)
根据MSDN,List <>.AddRange()应根据需要自动调整大小:
如果新的Count(当前Count加上集合的大小)将大于Capacity,则List <(Of <(T>)>)的容量会通过自动重新分配内部数组以适应新元素而增加,并且在添加新元素之前将现有元素复制到新数组.
有人可以想到AddRange会抛出这种类型的异常的情况吗?
编辑:
回答有关FindObjects()方法的问题.它基本上看起来像这样:
List<MyObject> retObjs = new List<MyObject>();
foreach(MyObject obj in objectList)
{
if(someCondition)
retObj.Add(obj);
}
Run Code Online (Sandbox Code Playgroud) 我有一个函数接受char*作为其参数之一.我需要操纵它,但保留原始的char*.基本上,我想创建这个char*的工作副本.看起来这应该很容易,但我真的很挣扎.
我的第一个(幼稚)尝试是创建另一个char*并将其设置为等于原始:
char* linkCopy = link;
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,因为我所做的只是让他们指向同一个地方.
我应该使用strncpy来实现这一目标吗?
我尝试过以下操作,但会导致崩溃:
char linkCopy[sizeof(link)] = strncpy(linkCopy, link, sizeof(link));
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西......?
编辑:我很抱歉,我试图简化示例,但我在第二个示例中留下了一些较长的变量名称.固定.
我一直在努力改变为表单主标题栏上的按钮显示的工具提示的文本.
简而言之,我们利用Windows窗体的"帮助"按钮来实现其他目的.这工作正常.问题是,当鼠标悬停在该按钮上时,会出现"帮助"工具提示,这对应用程序没有任何意义.
理想情况下,有一些方法可以为我的应用程序更改该工具提示的文本; 但是,在这一点上,我只是想找到一种完全禁用工具提示的方法.
我知道你可以通过在regedit中修改'UserPreferencesMask'键来禁用整个操作系统的工具提示,但我真的想要一种让它只影响我的应用程序的方法.
同样,理想情况下,托管代码可能会有一些方法,但我不反对链接到Windows API等.
感谢您解决此问题的任何建议!
我今天遇到了一个问题,我不完全确定为什么它不起作用.
以下代码示例将崩溃:
static void Main(string[] args)
{
int i32 = 10;
object obj = i32;
long i64 = (long)obj;
}
Run Code Online (Sandbox Code Playgroud)
这将导致InvalidCastException.为什么这不起作用?C#不够聪明,不知道该对象实际上是int类型吗?
我已经提出了一个解决方法,但我很好奇为什么上面的代码示例首先不起作用.
蒂姆,谢谢
我想知道 在使用FxCop时人们对CA1806(DoNotIgnoreMethodResults)静态代码分析警告的看法.
我有几种情况,我使用Int32.TryParse来提取保存在文件中的内部配置信息.我最终得到了很多看起来像的代码:
Int32.TryParse(someString, NumberStyles.Integer, CultureInfo.InvariantCulture, out intResult);
Run Code Online (Sandbox Code Playgroud)
MSDN说如果出现故障,intResult的默认结果为零,这正是我想要的.
不幸的是,此代码将在执行静态代码分析时触发CA1806.似乎有很多冗余/无用的代码来修复错误,如下所示:
bool success = Int32.TryParse(someString, NumberStyles.Integer, CultureInfo.InvariantCulture, out intResult);
if (!success)
{
intResult= 0;
}
Run Code Online (Sandbox Code Playgroud)
我应该抑制此消息或咬住子弹并添加所有这些冗余错误检查?或者也许某人对处理这样的案件有更好的想法?
谢谢!