罪魁祸首是关键字限制。我错过了演员 感谢
Linux操作系统。
你能帮我找一个优秀的解决方案来编写我的参数吗?
我失败了因为我不想采取正常的路径(见代码)。
像&(data-> mmap)这样的一些非常优雅的参数,以避免创建一个虚拟变量,就像以我的方式暴露出来来规避问题一样。
这实际上不起作用。
我必须这样做,因为可以用不同的含义调用该函数。 结构要复杂得多,根据我在代码中的位置,第二个参数不一样。
struct mystruct {
char * mmap;
}
void test(mystruct * _input, char * my_char){
int fd;
...
// WORKS FINE. THE ADDRESS IS PRINTED IN mySecondFunction CORRECTLY.
// THAT IS THE OBVIOUS WAY
//_input->_mmap = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );
// FAILS TO PRINT THE RIGHT ADDRESS IN mySecondFunction
my_char = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );
...
printf("in function address %p\n", my_char);
}
void mySecondFunction(mystruct * data){
test(data, data->mmap);
printf("data->mmap %p\n",data->mmap);
}
int main(void){
mystruct test;
mySecondFunction(&test);
return 0;
}
void test(mystruct * _input, char ** my_char){
...
* my_char = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );
...
}
void mySecondFunction(mystruct * data){
char * _tmp;
// This is where i would like something like &data->mmap to replace &_tmp in order to get the right address directly.
test(data, &_tmp);
data->mmap = tmp;
printf("data->mmap %p\n",data->mmap);
}
由于
答案 0 :(得分:2)
在test
中,您可以将本地my_char
变量设置为mmap
的地址。这不会影响_tmp
中的main
变量。
如果要更改传递给函数的变量,则必须将指针传递给它,如下所示:
void test(mystruct * _input, char ** my_char){
*my_char = (vhar*)mmap(...);
}
test(data, &data->mmap);
答案 1 :(得分:1)
这是一个完整的解决方法:
void test(mystruct * _input, char ** my_char){
//Update the reference that was passed
*my_char = (char*)mmap( 0 , 128 , PROT_READ | PROT_WRITE , MAP_SHARED , fd , 0 );
printf("in function address %p\n", my_char);
}
void mySecondFunction(mystruct * data){
test(data, &(data->mmap)); // Pass by reference
printf("data->mmap %p\n",&(data->mmap)); // Prints address of data->mmap
}