小编ase*_*dik的帖子

C 递增指针地址传递给函数 ++ 运算符

我有一个从这次讨论中提出的问题:C - 修改传递给函数的指针的地址

假设我有以下代码:

#include <stdio.h>
foo(char **ptr){
    *ptr++;
}

int main()
{

    char *ptr = malloc(64);
    char arr[] = "Hello World!";
    memcpy(ptr, arr, sizeof(arr)); 
    foo(&ptr);
    foo(&ptr);
    printf("%s",ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道这个程序的输出是什么,我认为它应该是llo World!

经过一番调查后,我发现了上面链接的问题,并意识到,在 C 中,函数的参数总是按传递。到目前为止没有问题。当将*ptr++;表达式更改为 ->*ptr = *ptr +1;输出时,将变为:llo World!

在这一点上,我可以说我有点困惑。为了改变指针地址,我们需要一个双指针。这很好,但是为什么后期增量操作会有所不同呢?是因为运算符优先级吗?

这里我在在线 C 编译器中尝试了这个例子。

c pointers pass-by-reference post-increment

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

为什么捕获 lambda 在 C++ 中不起作用?

我正在使用 C++ 中的 lambda 表达式,我尝试了一些方法来查看结果。我实际上在 CppCon Back to Basics: Lambdas from Scratch - Arthur O'Dwyer - CppCon 2019 @21:47 中观看了视频并开始使用 lambdas。

举个例子,我试过这个:

#include <iostream>
using namespace std;
int g = 10;//global var 'g'

//creating lambda
auto kitten = [=] () {return g+1;};
auto cat = [g=g] () {return g+1;};
// main
int main()
{
    g = 20;//modifying global variable 'g'
    cout<<"kitten: "<<kitten()<<"cat: "<<cat()<<endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是:

kitten: 21cat: 11
Run Code Online (Sandbox Code Playgroud)

在上面的例子中:[g=g]表示捕获一个名称g和类型与外部相同的数据成员g,就像我写的一样auto g=g。这是一个副本 …

c++ lambda std capture c++11

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

标签 统计

c ×1

c++ ×1

c++11 ×1

capture ×1

lambda ×1

pass-by-reference ×1

pointers ×1

post-increment ×1

std ×1