我想创建一个函数来执行由一组数据上的参数传递的函数.如何在C中将函数作为参数传递?
我在一些不同的函数中有一些代码看起来像这样:
void someFunction (int *data) {
data = (int *) malloc (sizeof (data));
}
void useData (int *data) {
printf ("%p", data);
}
int main () {
int *data = NULL;
someFunction (data);
useData (data);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
someFunction ()并useData ()在单独的模块(*.c文件)中定义.
问题是,虽然malloc工作正常,并且分配的内存可用someFunction,但一旦函数返回,相同的内存就不可用.
这里可以看到程序的示例运行,输出显示各种存储器地址.
有人可以向我解释我在这里做错了什么,以及如何让这段代码工作?
编辑:所以似乎我需要使用双指针来做这个 - 当我真的需要使用双指针时,我将如何做同样的事情?所以例如数据就是
int **data = NULL; //used for 2D array
Run Code Online (Sandbox Code Playgroud)
那么我是否需要在函数调用中使用三指针?
AKA - 对指针的这种迷恋是什么?
只使用了ActionScript,Java和C#这样的现代面向对象语言,我并不真正理解指针的重要性以及它们的用途.我在这里错过了什么?
可能重复:
用于多级指针解引用?
我正在阅读另一篇文章,这让我想到了这个问题.这会是什么意思?还有人用一个指向指向指针的指针的指针有多深......我理解Pointer to Pointer但是为什么你会在那之后更多地去?你有多深入使用****?
Foo(SomePtr***你好);
可能重复:
用于多级指针解引用?
假设我有以下变量:
char c[] = "ABC";
char *ptr = &c;
char **ptr2 = &ptr;
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过这种方式迭代指向字符数组的指针:
int i;
for(i=0; i<3; i++){
printf("TEST******************, %c\n", ptr[i]);
}
Run Code Online (Sandbox Code Playgroud)
如何遍历指向指针的指针?
例如:
bool insertInFront( IntElement **head, int data ){
IntElement *newElem = new IntElement;
if ( !newElem ) return false;
newElen->data = data;
*head = newElem; // Correctly updates head
return true;
}
Run Code Online (Sandbox Code Playgroud)
我是C++的新手,来自Java.我得到了*for indirection语法,但未**在此页面上列出:http://en.wikipedia.org/wiki/Operators_in_C_and_C++#Member_and_pointer_operators
我在编程访谈暴露的第28页找到了这个例子
更新
我意识到这个问题是天真的,我可能通过其他方式找到了答案.显然,我是这门语言的新手.仍然,问"什么**意思?" 对于不知道**是指针操作的人来说,在线支持不是很好.搜索C ** syntax或搜索时,很少有相关结果C++ ** meaning.此外,使用上面的wiki页面和其他文档ctrl + f进行搜索**,根本不会返回任何匹配项.
我只是想从初学者的角度澄清这个问题很难与重复的问题区分开来.当然,答案是一样的:-)谢谢你的帮助.