相关疑难解决方法(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
查看次数

为什么`*(multi + row)`生成指针地址而不是值?

为什么要*(multi + row)生成指针地址而不是值?我很困惑,但必须有一个很好的解释,但我不知道.

#include <stdio.h>
#define ROWS 5
#define COLS 10
int multi[ROWS][COLS];
int main(void)
{
    int row, col;
    for (row = 0; row < ROWS; row++)
    {
        for (col = 0; col < COLS; col++)
        {
            multi[row][col] = row*col;
        }

    }
    for (row = 0; row < ROWS; row++)
    {
        for (col = 0; col < COLS; col++)
        {
            printf("\n%d ",multi[row][col]);
            printf("%d ",*(*(multi + row) + col));
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c pointers multidimensional-array

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

指针的行为; char**argv

当我测试双指针行为时,我得到了一个我不太了解的结果.

==>代码1:

int main (int argc , char **argv)
{

if(*argv+1 ==NULL)
{
    printf("NULL pointer \n");
    exit(0) ;
}
else
{ 
    printf("test double pointer[] : %s \n ",*argv+1);  

}

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

====>结果1

root@root:/home/aa/test# ./geip 1255
test double pointer[] : /geip 
root@root:/home/aa/test#
Run Code Online (Sandbox Code Playgroud)

===>代码2:

int main (int argc , char **argv)
{

if(*argv+9 ==NULL)
{
    printf("NULL pointer \n");
    exit(0) ;
}
else
{ 
    printf("test double pointer[] : %s \n ",*argv+9);
}
 return(0);
 }
Run Code Online (Sandbox Code Playgroud)

==>结果2:

root@root:/home/aa/test# ./geip 1255
test double pointer[] : 55 …
Run Code Online (Sandbox Code Playgroud)

c linux pointers argv

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

标签 统计

c ×3

pointers ×3

multidimensional-array ×2

argv ×1

arrays ×1

callstack ×1

linux ×1