今天当我阅读别人的代码时,我看到了类似的void *func(void* i);东西,这void*对于函数名称和变量类型分别意味着什么?
另外,什么时候需要使用这种指针以及如何使用它?
我目前正在重构/整理C++项目中使用的一些旧C代码,并定期查看以下函数:
int f(void)
Run Code Online (Sandbox Code Playgroud)
我倾向于写作:
int f()
Run Code Online (Sandbox Code Playgroud)
是否有任何理由不在整个代码库中用()替换(void)以提高一致性,或者两者之间是否存在我不知道的细微差别?更具体地说,如果C++中的虚拟成员函数被描述为:
virtual int f(void)
Run Code Online (Sandbox Code Playgroud)
派生类包括成员函数:
int f()
Run Code Online (Sandbox Code Playgroud)
这是一个有效的覆盖?另外,基于几乎相同的签名,我是否可能遇到任何链接器问题?
如何将int*转换或转换为int [x]?
作为一个例子,我试图将指针int* c = new int[x]转换为数组int b[2]
int a = 1;
int b[2] = { 2, 3 };
int* c = new int[b[1]];
c[0] = b[0];
c[1] = b[1];
c[2] = a;
Run Code Online (Sandbox Code Playgroud)
首先,我知道我可以遍历指针和数组.因此,将指针转换为具有[]运算符的数组,以索引指针和数组,在迭代时将指针元素分配给数组元素(例如arr[i] = p[i]).我想知道在更少的代码行中是否可以实现相同的结果.
我试图自己搞清楚,所以我做了一个快速的程序,以确保我确切地知道我想要放置什么和在哪里.输出如下:
Address of {type: int} &a = 0031FEF4; a = 1
Address of {type: int[2]} &b = 0031FEE4; b = 0031FEE4
Address of {type: int[2]} &b[0] = 0031FEE4; b[0] = 2
Address of {type: int[2]} …Run Code Online (Sandbox Code Playgroud) 请考虑以下事项main():
int main(int argc, char *argv[])
{
return (0);
}
Run Code Online (Sandbox Code Playgroud)
在编译时cc -Wall -Wextra,会生成警告"未使用的参数".
当我不需要在函数中使用参数时(例如在不使用其参数的信号处理函数中int),我习惯于执行以下操作:
int main(int argc, char *argv[])
{
(void)argc;
(void)argv;
return (0);
}
Run Code Online (Sandbox Code Playgroud)
(对于特定的
main(),我有时看到别人做的:argv = argv - argc + argc)
但是,是什么(void)var真正办?
我明白这(void)是一个演员,所以我想我正在抛弃变量?什么是var;线(不投)呢?这是一个空任务,一个空表达式?
我想了解实际发生了什么.
从功能和语法上来说,原型为int foo(void)和的函数之间是否有区别int foo(void *)?
我知道,例如之间的差异,int bar(int)以及int bar(int *)-其中之一是寻找一个int,另一种是找一个int指针。void行为是否相同?
private void SaveMoney(string id...)
{
...
}
public void DoSthWithMoney(string action,string id...)
{
if(action=="save") return SaveMoney(string id);
...
}
Run Code Online (Sandbox Code Playgroud)
为什么C#不允许我通过公共函数返回私有函数的空白?它甚至是相同的数据类型"无效"......
或者数据类型是否无效?
以下代码真的是最短的解决方法吗?
if(action=="save") {
SaveMoney(string id);
return;
}
Run Code Online (Sandbox Code Playgroud) 我正在用Java编写的程序加载一个C DLL.我希望能够使用此声明从DLL中调用其中一个方法:
dll_function(const char* foo1, const char* foo2, const char* foo3, void** bar, size_t* bar2);
Run Code Online (Sandbox Code Playgroud)
如何在Java中使用正确类型的参数调用此方法?我知道(理论上)如何调用它,但我想知道的是如何从我的Java程序中传递"void**"和"size_t*"?基本上,我想知道什么是void和size_t***的"等效类型" 在Java中 ...
我找到了Pointer类,但没有设法让它工作?非常感谢 :)
我正在研究voidC#中的类型定义.它是一个空结构,代表无价值.
但是,这种结构与其他结构之间究竟有什么区别.我的意思是如果你定义一个返回类型为void的方法,那么return typeOf(void)你将得到一个错误.
看来C#对这种类型有不同的行为.
有一些关于void真实情况的文件.我的意思是幕后发生了什么.值类型结构怎么能指的是什么?
更新:
我认为你们中的一些人没有明白这个问题,这就是为什么你把它标记为重复的原因.我的问题是.虚空是一种结构.好 ?..结构是价值类型.在可能的最低阶段会发生什么?什么空虚代表在记忆中?这个结构和其他结构之间有什么区别,如果你按空格键F12,你只看到一个空结构?哪个c#有这个区别?
template <class Target>
struct unwrap_predicate<void (Target)>
{
typedef is_convertible<mpl::_, Target> type;
};
Run Code Online (Sandbox Code Playgroud)
这是来自Boost库的整个程序的一段代码,请参阅:http://www.boost.org/doc/libs/release/boost/parameter/preprocessor.hpp
我不明白Target.Class旁边的第一个Target.这是一个类型参数.第二个void(Target)看起来像我的非类型参数.一个参数如何作为类型和非类型.我对这两行感到困惑.有人可以帮忙吗?
我正在尝试编写此相对简单的代码,希望在其中更改set_current的值。错误消息:“参数类型'void'不完整”不断出现,我不确定为什么。
我不是一个经验丰富的编码员,但是我必须解决此问题才能上班。我真的希望你能帮助我。
void setCurrent(float set_current);
int main () {
printf("%i", setCurrent(0));
printf("/n/r");
}
void setCurrent(float set_current){
float v_set_cur = 1.25 + (ILIM_K_USE*set_current);
Run Code Online (Sandbox Code Playgroud)
在printf行上显示“参数类型'void'不完整”。当我删除0时,它可以工作,但我希望能够更改该数字。我在这里想念什么?