在 C 中传递数组、指向 int 的指针

2023-12-28

在使用 Matlab 多年之后,我对 C 语言的数值分析还是个新手。我有一个构造数组的函数,我需要将它返回到 main()。我在数组与指针方面遇到了常见的麻烦,并通过摆弄找出了如何做到这一点。但摆弄给我留下了一个基于以下代码的概念性问题。

#include <stdio.h>
void array_set(int y_out[2][2]);
void int_set_wrong(int  y);
void int_set_right(int *y);


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

    int y_array[2][2]={{0,0},{0,0}};
    int y_int_1 = 0;
    int y_int_2 = 0;

    array_set(y_array);
    int_set_wrong(  y_int_1 );
    int_set_right( &y_int_2 );

    printf("\nValue array: %d \n",y_array[0][0]);
    printf("Value int wrong: %d \n",y_int_1);
    printf("Value int right: %d \n",y_int_2);

    return 0;
}

void array_set(int y_out[2][2]){

    y_out[0][0] = 10;
    y_out[1][0] = 20;
    y_out[0][1] = 1;
    y_out[1][1] = 2;
}

void int_set_wrong(int y){

    y = 10;

}

void int_set_right(int * y){

    *y = 10;

}

上面的代码片段返回: 值数组:10 值 int 错误:0 右值 int: 10

我的问题分为几个部分,

首先,为什么函数“array_set”起作用?我希望它会像“int_set_wrong”一样失败。

顺便说一下,int 和 int 数组的处理方式有何不同?

此外,在“int_set_wrong”的情况下,是否有 y 的本地版本?

如果是这样,为什么在设置数组时没有本地版本的 y_out ?

谢谢您的帮助。顺便说一句,如果有任何事情会导致我的 array_set 实现出现问题,请插话。

--Andrew


In int_set_right()你传递了变量的地址y_int_2(您在中声明和定义main()) 通过运算符&.

int_set_right( &y_int_2 );

由于该函数可以访问实际变量y_int_2通过指针y(设置为地址的值y_int_2 from &y_int_2),您指定了y_int_2价值10当你分配*y = 10.

你可以阅读*y = 10 as:

变量的值,其 地址存储在y现在设置为 10

But for y_int_1,你仅仅通过了value。所以当你调用时创建了一个临时变量int_set_wrong()这是用初始化的value of y_int_1。所以你所做的就是改变临时的值local变量(局部变量int_set_wrong()).

这就是为什么y_int_1声明于main()不受int_set_wrong().

array_set有效,因为您传递了地址y_array通过该函数y_out变量(这是一个指针,例如y in int_set_right).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C 中传递数组、指向 int 的指针 的相关文章

  • 如何将异常对象序列化为 xml 字符串

    我想要类似的东西 try code here catch Exception ex stringXML Exception toXML 这样 stringXML 的值就是
  • 不能使用函数名称距离

    以下代码可以正常编译 include
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 通过 EUSART PIC18F45K80 打印消息

    我正在尝试向 Docklight 发送串行消息 但始终收到空值 我正在使用带有 XC8 MPLAB X 的 PIC18F45K80 我的代码中的所有内容似乎都是正确的 但我想我错了 我该如何修复它 include
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 使用 C# 和 .NET Core 在 AWS Cognito 用户池中进行用户管理

    如何使用 C 和 NET Core 3 x 管理 AWS Cognito 用户池中的用户 在文档中找不到有关它的任何内容 Attilio Gelosa 的原创文章 我写这篇文章是希望对其他人有帮助 我必须阅读一页又一页的文档 并从 AWS
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • 我可以在类变量中添加没有指定值的 PHP 数组键吗?

    我目前正在努力通过IBM 关于 CakePHP 的教程 http www 128 ibm com developerworks edu os dw os php cake1 html 有一次我遇到了这段代码
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 如何将对 System.Data.DataSetExtensions 的引用添加到网站 ascx.cs 文件?

    我们正在处理一个网站项目并尝试参考System Data DataSetExtensions 使用 Web 应用程序会更好 不过 技术主管有她的理由 这是我们尝试过的 找到装配路径 打开 Visual Studio 命令提示符并运行sn e
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • PHP - 递归搜索数组中的键和子键,成功时返回键['subkey]

    因此 我编写了一个函数 该函数可以在数组中深入搜索两个级别以查找键和子键对 基本上是在寻找key subkey 如果找到 则返回key subkey 我正在寻找一种以真正递归的方式执行此操作的方法 并根据需要进行尽可能多的深度搜索 直到到达
  • 如何明智地解释这个编译器警告?

    当我执行这段代码时question https stackoverflow com a 51056490 2411320 我收到这个警告 warning format d expects argument of type int but a
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 在标准 C 中将 int 转换为 string

    我是 C 新手 我正在寻找一个可以调用函数进行转换的示例int串起来 我发现itoa但这不是标准 C 的一部分 我还发现sprintf str d aInt 但问题是我不知道所需的 str 的大小 因此 我如何传递输出字符串的正确大小 有多
  • 为什么 char 数组需要 strcpy 而 char star 不需要 - 在 C 中使用结构

    我对这段代码有一个误解 typedef struct EXP int x char name char lastName 40 XMP main XMP a a name eaaa a lastName strcpy a lastName
  • 使texture2D在运行时/脚本Unity3D中可读[重复]

    这个问题在这里已经有答案了 我有一个插件 可以让我访问 Android 手机图库中的图片 这给了我一个Texture2D类型的纹理 然后我想使用 GetPixels 函数对其进行编辑 但默认情况下它未设置为可读 如何使纹理可读 以便我可以在
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一

随机推荐