相关疑难解决方法(0)

数组指针衰减并将多维数组传递给函数

我知道一个数组衰减到指针,如果一个声明

char things[8];
Run Code Online (Sandbox Code Playgroud)

然后在things其他地方使用,things是一个指向数组中第一个元素的指针.

另外,根据我的理解,如果有人宣称

char moreThings[8][8];
Run Code Online (Sandbox Code Playgroud)

那么moreThings不是指向char的类型指针,而是类型为"指向char的指针数组",因为衰减只发生一次.

什么时候moreThings传递给一个函数(比如说原型void doThings(char thingsGoHere[8][8])实际上是什么进行了堆栈?

如果moreThings不是指针类型,那么这仍然是一个传递引用?我想我一直认为它moreThings仍然代表了多维数组的基地址.如果doThings接受输入thingsGoHere并将其传递给另一个函数会怎么样?

规则几乎是除非指定数组输入,const然后数组将始终可修改?

我知道类型检查的东西只发生在编译时,但我仍然对技术上作为一个引用传递的东西感到困惑(即只有当传递类型指针的参数时,或者指针数组是否为传递 - 参考也是?)

很抱歉这个问题在这个地方有点儿,但由于我很难理解这一点,很难说出一个精确的询问.

c arrays callstack pointers multidimensional-array

10
推荐指数
3
解决办法
4346
查看次数

分段错误的原因与使用以下C代码返回随机值

请说明(输出原因)运行两个代码段会发生什么。请也说明它们的区别。分为以下两种版本setArr(int, int)...

#include <stdio.h>

void setArr(int, int);

int *arr[10]; // array of 10 int pointers

int main(int argc, char *argv[]) {
    int i;

    setArr(0, 0);
    setArr(1, 100);
    setArr(2, 200);
    setArr(3, 300);
    setArr(4, 400);

    for (i = 0; i < 5; i++) 
        printf("arr[%d]: %d\n", i, *arr[i]);   /* should be 0,100, 200,300,400 */

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

的版本 setArr

版本A

void setArr(int index, int v) {
    int i = v; 
    *arr[index] = i;
}
Run Code Online (Sandbox Code Playgroud)

输出: Segmentation fault (core dumped)

版本B

void …
Run Code Online (Sandbox Code Playgroud)

c coredump pointers segmentation-fault

1
推荐指数
1
解决办法
62
查看次数

-3
推荐指数
1
解决办法
1420
查看次数