标签: pointers

目标C中的功能指针

快问.有谁知道如何获得目标c方法的函数指针?我可以将C++方法声明为函数指针,但这是一个回调方法,因此C++方法需要成为类的一部分,因为它可以访问实例字段.我不知道如何使C++方法成为客观c类的一部分.有什么建议?

c++ pointers function objective-c

13
推荐指数
2
解决办法
1万
查看次数

C++ by-reference参数和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链接定义一个函数时的结果是什么?我无法找到任何相关信息.

c c++ compiler-construction pointers reference

13
推荐指数
2
解决办法
2601
查看次数

(*++ argv)[0]和while(c =*++ argv [0])之间的区别

我有以下代码片段:

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] …

c string pointers argv

13
推荐指数
3
解决办法
1万
查看次数

未初始化的值由堆分配创建

我一直在追逐这个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)

c malloc valgrind pointers strncpy

13
推荐指数
1
解决办法
1万
查看次数

指向特定固定地址的指针

如何为指针分配特定的内存地址?

微控制器中的特殊功能寄存器如AVR m128具有固定地址,AVR GCC在io.h头文件中定义了SFR,但我想自己处理它.

c pointers

13
推荐指数
1
解决办法
2万
查看次数

Haskell有指针吗?

你知道Haskell中是否有指针?

  • 如果是的话:你如何使用它们?他们有什么问题吗?为什么他们不受欢迎?

  • 如果不是:有什么理由吗?

haskell pointers language-design

13
推荐指数
3
解决办法
7015
查看次数

通过非const指针修改const

我对以下代码中发生的事情感到有点困惑:


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的地址?

c++ pointers casting const-correctness

13
推荐指数
2
解决办法
1021
查看次数

C:来自void指针的外推类型

假设一个函数将void指针作为参数,如下所示:int func(void *p);
我们如何确定或猜测p指向的类型?

c pointers void-pointers

13
推荐指数
3
解决办法
8811
查看次数

如何在C中声明和初始化指向结构的指针数组?

我在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 malloc null pointers structure

13
推荐指数
1
解决办法
5万
查看次数

什么是"空指针赋值错误"?

一对C指针面试问题这里是:什么是空指针赋值错误?

我已经google了一段时间,没有看到任何合理的解释.那是什么?试图通过空指针写?某种架构或环境特定的东西?究竟是什么错误?

c pointers

13
推荐指数
1
解决办法
3万
查看次数