在方法c中传递双指针
passing Double pointer in methods c
为什么当双指针作为单指针发送到函数并被访问时,在尝试分配内存时不会出现错误,即使在堆上分配内存,也会导致分段错误。
将双指针作为双指针参数传递给函数-效果良好
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void to_fun(char **dbl_ptr)
{
*dbl_ptr = malloc(20);
strcpy(*dbl_ptr,"cool");
}
void main( )
{
char **dbl_ptr = calloc ( 2 , sizeof(char *) );
to_fun ( (dbl_ptr + 1) );
printf("%sn",*(dbl_ptr + 1) );
}
将双指针作为单指针参数传递给函数-seg fault
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void to_fun(char *dbl_ptr)
{
dbl_ptr = malloc(20);
strcpy(dbl_ptr,"defnitely not cool");
}
void main( )
{
char **dbl_ptr = calloc ( 2 , sizeof(char *) );
to_fun ( *(dbl_ptr + 1) );
printf("%sn",*(dbl_ptr + 1) );
}
将双指针作为单指针参数传递给函数-效果良好
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void to_fun(char *dbl_ptr)
{
printf("%sn",dbl_ptr );
}
void main( )
{
char **dbl_ptr = calloc ( 2 , sizeof(char *) );
*(dbl_ptr + 1) = "cool";
to_fun ( *(dbl_ptr + 1) );
}
这只是一个让你得到问题的示例代码。。这不意味着像即兴创作的一个等等。。。
我知道指针和取消引用是如何深入工作的,但上面的内容仍然很烦人。任何人解释原因。
第一个代码块之所以有效,是因为您传递了一个指针,然后取消引用该指针以修改指针指向的内容(即main
中分配的内存块(。
在第二个代码块的情况下,您正在修改函数参数dbl_ptr
。函数参数的更改不会反映在调用函数中,因为所有参数都是按值传递的。
第三块代码之所以有效,是因为您正在读取一个函数参数并取消引用指向有效内存的指针值。
此外,您不是将char **
传递给第二个和第三个函数,而是将char *
传递给第三个。
您在main
中也没有分配足够的内存。您分配了2个字节,但您想要的是2个char *
:的空间
char **dbl_ptr = calloc ( 2 , sizeof(char *) );
当您想从函数内部修改变量,而该变量在函数范围之外时,您可以传递一个指向变量的指针:
void f(double *x) {
*x = 12;
}
void main() {
double z;
f(&z);
printf("%f", z);
}
当你的变量是一个指针时,你需要一个指向指针的指针:
void f(double **x) {
*x = malloc(...);
}
void main() {
double *z;
f(&z);
printf("%f", z[1]);
}
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 将成员函数指针作为参数传递给模板方法
- 通过函数指针定义类范围之外的方法
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 如何访问由共享指针保存的类方法?
- 初始化指向类实例的智能指针并访问其方法
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 有没有将变量名称转换为双指针的简短方法?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 类指针方法崩溃程序
- 证明两指针方法有效(对和)
- Qt 删除指针方法
- 我如何将一些类的指针方法转换为指针函数