是否可以将函数指针作为参数传递给C中的函数?
如果是这样,我将如何声明和定义一个以函数指针作为参数的函数?
我有下一个代码:
struct T
{
public T(int u)
{
this.U = 10; //Errors are here
}
public int U { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
C#编译器在规定的行中给出了一对错误:1)在将控制权返回给调用者之前,必须完全分配自动实现的属性"TestConsoleApp.Program.TU"的后备字段.考虑从构造函数初始化程序中调用默认构造函数.2)在分配所有字段之前,不能使用'this'对象
我做错了什么?帮帮我理解
它可能听起来很愚蠢.在C++ prime第5版P258中,它说:
默认情况下,它的类型是指向类类型的非对象版本的const指针.例如,默认情况下,Sales_data成员函数中的类型是Sales_data*const.
我可以理解,对于这个*是一个const指针,这意味着它初始化后指向的对象不能改变.但是它说:
虽然这是隐式的,但它遵循正常的初始化规则,这意味着(默认情况下)我们不能将它绑定到const对象.
但我写了以下代码,它仍然编译好:
class Test{
public:
Test() = default;
Test(const string &s): teststr(" ") {};
Test(int a) : testint(a) {};
Test(const string &s, int a): teststr(s), testint(a) {};
string getstr() const { return teststr; };
int getint() { return testint; }; //there is no const here
private:
string teststr;
int testint = 0;
};
int main(){
Test a("abc",2);
cout << a.getint() << " ";
cout << a.getstr() << endl;
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如果编译器能够很好地编译它是否存在'const',为什么它重要?然后这本书说:
毕竟,isbn的主体不会改变这个指向的对象,所以如果这是一个指向const的指针,我们的函数会更灵活. …
我已经读过std map是使用二叉搜索树数据结构实现的.
BST是一种顺序数据结构(类似于数组中的元素),它将元素存储在BST节点中并按顺序维护元素.例如,如果element小于node,则将其存储在节点的左侧,如果它大于node,则将其存储在节点的右侧.通过这种方法,我们实现了搜索,插入等各种操作的O(log n)复杂度.
但是,std map是一个关联容器.我们有一个键和值插入.它是否真的使用BST实现,如果是,如何实现?在BST,我们没有任何关键或价值.它是一种标准容器.
我有点困惑.请帮我澄清一下.它不影响我的工作,但我想更好地理解它们.谢谢你的帮助.
我有以下代码,我想检查文件是否被锁定.如果没有,那么我想写信给它.我通过在两个终端上同时运行它来运行此代码但是我每次都在两个选项卡中都处于"锁定"状态,即使我没有锁定它.代码如下:
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
struct flock fl,fl2;
int fd;
fl.l_type = F_WRLCK; /* read/write lock */
fl.l_whence = SEEK_SET; /* beginning of file */
fl.l_start = 0; /* offset from l_whence */
fl.l_len = 0; /* length, 0 = to EOF */
fl.l_pid = getpid(); /* PID */
fd = open("locked_file", O_RDWR | O_EXCL | O_CREAT);
fcntl(fd, F_GETLK, &fl2);
if(fl2.l_type!=F_UNLCK)
{
printf("locked");
}
else
{
fcntl(fd, F_SETLKW, &fl); /* set lock */
write(fd,"hello",5);
usleep(10000000); …Run Code Online (Sandbox Code Playgroud) 我一直在使用 Python 2.7 开发 QGIS 插件,它工作得很好,直到我真正去对映射图层进行一些图像处理。即使是收集栅格图层(例如 5k x 1k 部分)的 RGB 值等简单任务也需要一点时间(约 2 分钟)。如果必须的话,我可以忍受这一点,但是当我开始计算数据的简单指标(例如熵)时,处理所需的时间就会激增(我在大约 40 分钟无响应后停止了处理)。
我之前用 C++ 编写过熵代码,并且希望能够以这种方式处理数据。经过一些研究后,我发现 Python 可以使用 stdin 和 stdout 来传输数据,并在http://ubuntuforums.org/archive/index.php/t-524072.html的论坛中发现了以下示例
使用此 Python 代码作为驱动程序
import subprocess
proc = subprocess.Popen("C:\Python27\PythonPipes.exe",
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
state = "run"
while state == "run":
input = raw_input("Message to CPP>> ")
if input == "quit":
state = "terminate" # any string other than "run" will do
proc.stdin.write(input + "\n")
cppMessage = proc.stdout.readline().rstrip("\n")
print "cppreturn message ->" + cppMessage + " written …Run Code Online (Sandbox Code Playgroud) 请在下面找到代码部分.我想在循环中连续打印变量的当前值.一旦我按下转义键,就必须终止循环.这里的问题是执行在getchar函数处停止.但我希望它继续并打印变量的值,直到我点击退出按钮.
do
{
vUpdateVariable(); // routine to update the current value of variable
printf("Value is %f\r", fVariable);
ucKey = getchar();
usleep(1000);
}while (ucKey != 0x1B);
Run Code Online (Sandbox Code Playgroud) 如果我希望使用自定义的预分配堆构造类似malloc的功能,那么在C中最好的方法是什么?
我在这里的特定问题是,我有一个可映射的(类似于内存的)设备,该设备已放置到我的地址空间中,但是我需要获得一种更灵活的方式来使用此内存来存储随时间分配和释放的对象。
我知道malloc,free和其他类似函数用于在堆上执行这种分配,但是有什么方法可以使用这种函数提供的逻辑来实现其动态行为,同时提供我自己的地址空间来进行操作有问题的堆?
尝试从 Qt Creator 编译我的 Qt 项目时出现上述错误。我可以在某处将目标机器类型更改为 x64 吗?
当我从命令行将项目转换为 VC++ 项目时,它会生成并运行。这已经足够好了,但是如果能够直接从 Qt Creator 构建和运行会很方便。
这是因为 Qt 是 32 位而其他组件是 64 位吗?
在尝试消除我的 GCC 警告代码时,我发现了一个奇怪的错误/行为。我的程序使用一个自定义退出函数,它执行一些清理工作,最后调用exit().
然而,我对这个退出函数的使用导致 GCC 产生以下虚假警告:
使用自定义退出函数控制到达非空函数的末尾
导致此错误的程序示例如下:
文件1.c:
extern void CleanExit(int ExitCode);
int MyFunc(int ErrorCode)
{
if(-1 == ErrorCode)
return -1;
if(1 == ErrorCode)
return 1;
if(2 == ErrorCode)
return 0;
if(3 == ErrorCode)
CleanExit(0);
CleanExit(-1);
}
Run Code Online (Sandbox Code Playgroud)
文件2.c:
void CleanExit(int ExitCode)
{
/* Do Some Cleanup */
exit(ExitCode);
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以消除这些警告而不会给使用这种结构的每个函数添加无用的垃圾吗?
我更愿意使用标准 C 来这样做,但如果需要,我愿意使用某种 GCC 编译指示。
http://dlang.org/class.html#destructors上的D文档说明了这一点
"垃圾收集器不能保证为所有未引用的对象运行析构函数."
然而,我对这实际意味着什么有点cont..这是说GC实现可以选择在收集它们所属的对象时不调用析构函数吗?如果是这种情况,我几乎看不到destructors中的一点,因为删除被删除了.
我也可以将其解释为垃圾收集器可能根本不会收集某些对象.虽然更容易理解,但同样令人担忧.这是否意味着收集器可能导致泄漏?
作为一个后续工作但我希望仍然在同一问题的范围内,如果其中一个确实如此,是否有任何文档可用于解释如何管理需要析构函数的对象,例如代表内存以外的资源的那些如果垃圾收集器不能在这些情况下使用似乎暗示在这里?
我正在进行一项任务,在这里我们得到一个二维数组,我们需要进行一些计算.
我想将计算的逻辑封装到它自己的类中,所以在我的计算类中,我有成员char**,我试图用给定的char arr [5] [5]初始化.我首先尝试做一个c风格的演员,让它编译,但如果我试图尊重我的成员变量会导致段错误.
简而言之,为什么这不起作用
class MyClass{
Myclass(char arr[5][5]){
m_PmyArr = arr; //doesn't work
}
char** m_PmyArr;
};
Run Code Online (Sandbox Code Playgroud)
为什么这会编译,但会在取消引用时导致段错误
class MyClass{
Myclass(char arr[5][5]){
m_PmyArr = (char**)arr; //will compile, but will segfault
}
char** m_PmyArr;
};
Run Code Online (Sandbox Code Playgroud)
我希望这不会被解释为"我的工作对我来说",我真的一直试图更好地掌握指针的细微差别,这与我之前理解数组和指针之间的关系相反
我知道0和NULL自己评估为FALSE,我知道负整数或正整数自己评估为TRUE.
我的理解是NOT运算将在计算表达式后发生,因此if (-1)将进行求值TRUE,然后应用!操作数将意味着NOT TRUE等于FALSE.这是正确的操作顺序,是否正确if (!(-1))评估FALSE?
c ×6
c++ ×5
linux ×2
.net ×1
arrays ×1
c# ×1
constructor ×1
d ×1
destructor ×1
fcntl ×1
file ×1
finalizer ×1
gcc ×1
getchar ×1
heap-memory ×1
if-statement ×1
locking ×1
loops ×1
memory ×1
negation ×1
nonblocking ×1
pipe ×1
pointers ×1
python ×1
python-2.7 ×1
qt ×1
qt-creator ×1
return ×1
stl ×1