小编The*_*ian的帖子

传递函数指针

关于如何将指针传递给指针函数,我有点困惑.我有一个函数,它指向一个我理解没有问题的函数(ExecBlock).但是我给了另一个函数原型(ExecBlock2),它接受了解引用指针(我不确定它到底是什么),如果传递函数有任何参数,也会接受参数.如果有人可以解释优先级以及解释引用函数的确切内容.这不仅仅是传递函数本身吗?在这种情况下(void*)做什么?

int ExecBlock (void (*f) (void), int isSet)
{
    return ExecBlock2( HOW TO PASS HERE? , NULL, isSet);
}

int ExecBlock2(void *(*f)(void *), void *arg, int isSet)
{
    ... more code
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c c++ pointers function parameter-passing

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

DynamoDB:如何使用查询过滤器检查MAP中的条件

我有一个表,结构如下:

DynamoDB文档

当我进行查询时,我希望能够对数据映射进行查询过滤; 但我不确定如何设置查询.

这是我到目前为止:

HashMap<String, AttributeValue> map = new HashMap<String, AttributeValue>();
map.put("byUserId", new AttributeValue().withS("vl49uga5ljjcoln65rcaspmg8u"));

queryExpression
    .withQueryFilterEntry("data", new Condition()
        .withAttributeValueList(new AttributeValue().withM(map))
        .withComparisonOperator(ComparisonOperator.CONTAINS));
Run Code Online (Sandbox Code Playgroud)

但我构建过滤器的方式不正确,我一直遇到以下错误:

Exception in thread "main" com.amazonaws.AmazonServiceException: One or more parameter values were invalid: ComparisonOperator CONTAINS is not valid for M AttributeValue type (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: CHIOME68L1HVGO81URD7CIOS6BVV4KQNSO5AEMVJF66Q9ASUAAJG)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1077)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:725)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:460)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:295)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:3106)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.query(AmazonDynamoDBClient.java:1118)
Run Code Online (Sandbox Code Playgroud)

那么我应该使用什么比较运算符(因为IN用于列表类型),以及如何构建查询过滤器以便我可以在MAP内部指定比较.

谢谢!

java amazon-web-services amazon-dynamodb aws-sdk

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

循环中的变量范围

这可能是我遇到的最奇怪的事情之一.我不用C语言编程,但从我所知道的是真实加上在线检查不同来源,变量macroNamemacroBody只在while循环的范围内定义.因此,每次循环运行时,我都期望marcoNamemacroBody获取新地址并成为全新的变量.然而,事实并非如此.

我发现即使循环再次运行,两个变量共享相同的地址,这使我严重头疼链接列表,我需要检查元素的唯一性.我不知道为什么会这样.每次while循环运行时,macroNamemacroBody都不应该获得全新的地址吗?

我知道这是问题所在,因为我打印地址并且它们是相同的.

while(fgets(line, sizeof(line), fp) != NULL) // Get new line
{
    char macroName[MAXLINE];
    char macroBody[MAXLINE];

    // ... more code

    switch (command_type)
    {
        case hake_macro_definition:
            // ... more code

            printf("**********%p | %p\n", &macroName, &macroBody);
            break;

        // .... more cases
    }
}
Run Code Online (Sandbox Code Playgroud)

代码是我的链表代码的一部分.

struct macro {
    struct macro *next;
    struct macro *previous;
    char *name;
    char *body;
};    
Run Code Online (Sandbox Code Playgroud)

检查元素是否已存在于链表中的函数.但由于*name具有相同的地址,我总是在if条件内.

static struct macro *macro_lookup(char *name)
{
    struct macro *temp = …
Run Code Online (Sandbox Code Playgroud)

c variables scope

6
推荐指数
1
解决办法
2394
查看次数