c - C中三重指针的目的
问题描述
虽然我在这方面看到了一些线程,但我无法理解三重指针背后的含义,因为似乎没有它们也可以做同样的事情。
void Reading(int *N, int ***M) {
printf("Input an integer N: \n");
scanf("%d", N);
*M = malloc(N * sizeof(int*));
int i;
for (i = 0; i < N; i++)
*(*M+i) = malloc(N * sizeof(int));
printf("Input N*N integers that will form a matrix \n");
int i, j;
for (i = 0; i < *N; i++)
for (j = 0; j < *N; j++)
scanf("%d", &((*M)[i][j]));
}
此代码使 **M 成为二维数组。如果我将 malloc 过程放入 main 中,则不再需要三重指针。有人可以解释为什么会这样吗?
解决方案
如果我将 malloc 过程放入 main 中,则不再需要三重指针。
将变量传递给函数有两种方法:通过值或通过引用。当您传递变量的引用时,您可以修改它。
例子:
void fun(int a) {
a = 42; // Does nothing
}
int b = 9;
fun(b);
// b is unchanged.
void fun(int *a) {
*a = 42;
}
int b = 9;
fun(&b);
// b equals 42.
您的变量恰好是 a 类型int **
,当您传递此变量的地址(引用)时,这使其成为 a int ***
。
推荐阅读
- assembly - 累加器中的值是多少?
- java - 将对象添加到对象的 ArrayList 时出现 OutOfMemoryError
- hive - Hive 和 Impala 为安装了 Sentry 的用户显示不同的角色
- elasticsearch - 将参数传递给 Liferay 的服务搜索功能
- python - 将图像预测存储到 csv 的 Python for 循环启动很快但速度变慢
- mysql - 我不能在 mysql 中删除外键
- python - set_author with discord.py 抛出 NameError
- sqlite - 将 2 个表格中的小时和分钟相加并以 HH:MM 显示结果
- r - 将站点构建到网站时,Blogdown 不显示图表
- javascript - casperjs无法使用css选择器找到元素