我有一个从这次讨论中提出的问题: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++ 中的 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。这是一个副本 …