快问.有谁知道如何获得目标c方法的函数指针?我可以将C++方法声明为函数指针,但这是一个回调方法,因此C++方法需要成为类的一部分,因为它可以访问实例字段.我不知道如何使C++方法成为客观c类的一部分.有什么建议?
我遇到了一段代码(包含XLC8和MSFT9编译器),包含一个带有C链接和引用参数定义的函数的C++文件.这让我很烦,因为引用只是C++.有问题的函数是从C代码调用的,它被声明为将指针参数取代到相同的类型而不是引用参数.
简化示例:
C++文件:
extern "C" void f(int &i)
{
i++;
}
Run Code Online (Sandbox Code Playgroud)
C档案:
void f(int *);
int main()
{
int a = 2;
f(&a);
printf("%d\n", a); /* Prints 3 */
}
Run Code Online (Sandbox Code Playgroud)
现在,街上的一句话就是大多数C++编译器,它们都像指针一样实现引用.是这样的,只是纯粹的运气,这个代码工作的原因,或者说它在C++规范中的某处说明当你用引用参数和C链接定义一个函数时的结果是什么?我无法找到任何相关信息.
我有以下代码片段:
int main(int argc, char *argv[])
{
char line[MAXLINE];
long lineno = 0;
int c, except = 0, number = 0, found = 0;
while(--argc > 0 && (*++argv)[0] == '-') //These two lines
while(c = *++argv[0]) //These two lines
switch(c) {
case 'x':
except = 1;
break;
case 'n':
number = 1;
break;
default:
printf("find: illegal option %c\n", c);
argc = 0;
found = -1;
break;
}
...
}
Run Code Online (Sandbox Code Playgroud)
包含以下表达式:
while(--argc > 0 && (*++argv)[0] == '-')
Run Code Online (Sandbox Code Playgroud)
括号中的这个表达式是否(*++argv)[0] …
我一直在追逐这个bug,我只是不明白.我忘了一些基本的C或什么?
==28357== Conditional jump or move depends on uninitialised value(s)
==28357== at 0x4C261E8: strlen (mc_replace_strmem.c:275)
==28357== by 0x4E9280A: puts (ioputs.c:36)
==28357== by 0x400C21: handlePath (myshell.c:105)
==28357== by 0x400B17: handleInput (myshell.c:69)
==28357== by 0x400AAD: acceptInput (myshell.c:60)
==28357== by 0x4009CF: main (myshell.c:33)
==28357== Uninitialised value was created by a heap allocation
==28357== at 0x4C25153: malloc (vg_replace_malloc.c:195)
==28357== by 0x400BDE: handlePath (myshell.c:99)
==28357== by 0x400B17: handleInput (myshell.c:69)
==28357== by 0x400AAD: acceptInput (myshell.c:60)
==28357== by 0x4009CF: main (myshell.c:33)
==28357==
(095) void handlePath(char *input) { …Run Code Online (Sandbox Code Playgroud) 如何为指针分配特定的内存地址?
微控制器中的特殊功能寄存器如AVR m128具有固定地址,AVR GCC在io.h头文件中定义了SFR,但我想自己处理它.
你知道Haskell中是否有指针?
如果是的话:你如何使用它们?他们有什么问题吗?为什么他们不受欢迎?
如果不是:有什么理由吗?
我对以下代码中发生的事情感到有点困惑:
const int e = 2;
int* w = ( int* ) &e; // (1) cast to remove const-ness
*w = 5; // (2)
cout << *w << endl; // (3) outputs 5
cout << e << endl; // (4) outputs 2
cout << "w = " << w << endl; // (5) w points to the address of e
cout << "&e = " << &e << endl;
Run Code Online (Sandbox Code Playgroud)
在(1)中,w指向e的地址.在(2)中,该值变为5.但是,当显示*w和e的值时,它们的值不同.但是如果你打印w指针和&e的值,它们具有相同的值/地址.
为什么e仍然包含2,即使它被改为5?他们存放在一个单独的位置?还是暂时的?但是,为什么w指出的价值仍然是e的地址?
假设一个函数将void指针作为参数,如下所示:int func(void *p);
我们如何确定或猜测p指向的类型?
我在C中有一个小任务.我正在尝试创建一个指向结构的指针数组.我的问题是如何将每个指针初始化为NULL?此外,在为数组成员分配内存后,我无法为数组元素指向的结构赋值.
#include <stdio.h>
#include <stdlib.h>
typedef struct list_node list_node_t;
struct list_node
{
char *key;
int value;
list_node_t *next;
};
int main()
{
list_node_t *ptr = (list_node_t*) malloc(sizeof(list_node_t));
ptr->key = "Hello There";
ptr->value = 1;
ptr->next = NULL;
// Above works fine
// Below is erroneous
list_node_t **array[10] = {NULL};
*array[0] = (list_node_t*) malloc(sizeof(list_node_t));
array[0]->key = "Hello world!"; //request for member ‘key’ in something not a structure or union
array[0]->value = 22; //request for member ‘value’ in something not a structure …Run Code Online (Sandbox Code Playgroud) 一对C指针面试问题这里是:什么是空指针赋值错误?
我已经google了一段时间,没有看到任何合理的解释.那是什么?试图通过空指针写?某种架构或环境特定的东西?究竟是什么错误?