gpt4 book ai didi

c - int * 和 double ** 对于 C 函数参数之外的元素意味着什么?

转载 作者:行者123 更新时间:2023-11-30 14:55:53 25 4
gpt4 key购买 nike

我正在学习C语言并做了很多练习。我知道 ***.c 函数中的指针。

请考虑以下函数(另一个 .c 函数)

void pcc(int* n, int* d, int* family, int* type, double* par, double* nu, double* out)
{
int i, j, in=1, k, **fam;
double *w, **v, t, **theta, **x, **ny;

…some works

}

我的问题是,为什么我们在函数的参数中使用指针?因为据我了解,我们使用指针来指向先前识别的元素。

此外,为什么我们对函数参数中尚未定义的某些元素使用指针。例如,在最后一个函数中,我们在写入函数的参数后定义了一个新元素:

 int i, j, in=1, k, **fam;
double *w, **v, t, **theta, **x, **ny;

例如,double *w 不在函数的参数中!还有 **v 和其他元素。我们如何知道他们必须获得 ***

请问有什么帮助吗?

最佳答案

将变量声明为 * 或 ** 的原因是无数的,最好尝试理解它们的实际含义,而不是纠结于为什么在这个特定实例中使用它们。

指针*是对存储值的内存位置的引用。对于 char 来说,它是对保存一个字节的单个内存位置的引用,对于 int 来说,它在 32 位系统上通常是 4 个字节。

您可以传递一个指针作为参数来指示这是您想要存储结果的位置。另一个原因可能是效率。如果您有一个非常大的结构,最好将 4 字节(在 32 位系统上)的引用传递给该结构所在的内存区域,而不是将整个结构加载到堆栈上

** 是双指针。它指向一个特定的内存位置,该位置本身存储着其他东西的内存位置。

char a[5];

这里,变量a实际上是一个char *,指向a[]的第一个元素,即a[0]。

char a[5][5];

这里a是一个char **,指向a[][]的第一个元素,即a[0],它会返回一个指向a[0][0]的char *。

当您想摆弄指针时,第二个示例更好。也许你有一个 char** (一个“字符串数组”),并且你想替换其中一个“字符串”(字符串只是 c 中的 char[]),你只需更改 char* 指向的字符**)。

我希望这能让你更清楚一点。

关于c - int * 和 double ** 对于 C 函数参数之外的元素意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45325286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com