鱼C论坛

 找回密码
 立即注册
查看: 611|回复: 24

[已解决]指针传值

[复制链接]
回帖奖励 66 鱼币 回复本帖可获得 2 鱼币奖励! 每人限 1 次
发表于 2024-4-25 16:56:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>

char* dd2 (char* data)
{
    return data;
}

int dd1 (char* data)
{
    char j[10] = "ssss";
    // data = j;
    data = dd2(j);
    return 0;
}



int main ()
{
    char m[102] = {0};
    dd1(m);
    printf("%s\n",m);
  return 0;
}
如何让m成功获取值,改变dd1函数类型
最佳答案
2024-4-25 17:04:38
渔村暮火 发表于 2024-04-25 17:04
dd1函数返回值只能是整型,参数只能是一级指针


如果`dd1`函数返回值只能是整型,参数只能是一级指针,那么我们可以使用传入指针的方式来改变指针指向的值。以下代码演示了如何在这种情况下实现指针传值:
#include 

char* dd2()
{
    char* data = "ssss";
    return data;
}

int dd1(char* data)
{
    char* result = dd2();
    // 修改data指向的值
    // ...
    return 0;
}

int main()
{
    char* m = NULL;
    dd1(m);
    printf("%s\n", m);
    return 0;
}

在上述代码中,`dd1`函数的返回值类型为`int`,参数类型为一级指针`char*`。在`dd1`函数内部,我们调用`dd2`函数获取需要赋值给`m`的字符串指针,并将其存储在临时指针变量`result`中。根据你的需求,在`dd1`函数中你可以修改`data`指向的值。但请注意,由于`data`是一级指针,它所指向的值的更改只在`dd1`函数内部有效,不会影响到`main`函数中的`m`。

所以,最终在`main`函数中打印`m`的值时,输出结果仍然为空指针。由于`dd1`函数不能返回指针,我们无法通过直接调用`dd1`函数来实现改变`m`的值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-25 16:56:31 | 显示全部楼层
这段代码中存在一些问题。首先,函数`char* dd2 (char* data)`返回了一个指针类型的值,但在`dd1`函数中并没有正确地接收这个返回值。其次,在`dd1`函数中,你想要将一个字符串赋值给字符指针`data`,但是你使用了一个字符变量`j`来存储这个字符串,这是不正确的。

下面是对代码进行修改后的版本:
#include <stdio.h>
#include <stdlib.h>

char* dd2()
{
    char* data = "ssss";
    return data;
}

void dd1(char** data)
{
    *data = dd2();
}

int main()
{
    char* m = NULL;
    dd1(&m);
    printf("%s\n", m);
    free(m);  // 需要手动释放内存
    return 0;
}

在这个修改后的代码中,我们将`dd2`函数修改为直接返回一个字符串指针。然后,在`dd1`函数中,我们将`data`参数改为指向指针的指针类型`char**`,并使用间接赋值运算符(即`*`)来修改指针指向的内存地址,实现传递并更改指针的值。

在`main`函数中,我们通过传递`&m`来传递指向指针`m`的指针,以便在`dd1`函数中修改`m`的值。最后,我们使用`printf`打印出`m`的值,然后使用`free`函数手动释放`m`所指向的内存空间。

请注意,在使用`free`函数之前必须正确地分配内存。在上述例子中,我们可以直接将`m`初始化为`NULL`,然后在`dd2`函数中分配内存,这样就不需要手动分配或释放内存空间了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-25 16:59:35 | 显示全部楼层
FishC 发表于 2024-4-25 16:56
这段代码中存在一些问题。首先,函数`char* dd2 (char* data)`返回了一个指针类型的值,但在`dd1`函数中并 ...

不要改变dd1函数的类型,只能是int dd1 (char* data)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-25 16:59:55 | 显示全部楼层
渔村暮火 发表于 2024-04-25 16:59
不要改变dd1函数的类型,只能是int dd1 (char* data)


如果我们不能改变`dd1`函数的返回类型,并且仍然需要通过`dd1`函数来改变`m`的值,那么我们可以使用指针的指针来实现。

下面是修改后的代码:
#include <stdio.h>

char* dd2()
{
    char* data = "ssss";
    return data;
}

int dd1(char** data)
{
    *data = dd2();
    return 0;
}

int main()
{
    char* m = NULL;
    dd1(&m);
    printf("%s\n", m);
    return 0;
}

在这个修改后的代码中,`dd1`函数的返回类型仍然是`int`。我们使用了指向指针的指针`char**`作为参数类型,以便可以通过间接赋值操作来修改传入的指针`m`的值。然后,在`main`函数中,我们将`&m`传递给`dd1`函数,以便在`dd1`函数内部改变`m`的值。

这样,你就可以正确地通过`dd1`函数改变`m`的值,并在`main`函数中打印出修改后的结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-25 17:03:01 | 显示全部楼层
FishC 发表于 2024-4-25 16:59
如果我们不能改变`dd1`函数的返回类型,并且仍然需要通过`dd1`函数来改变`m`的值,那么我们可以使用指 ...

dd1函数的参数只能是一级指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-25 17:03:20 | 显示全部楼层
渔村暮火 发表于 2024-04-25 17:03
dd1函数的参数只能是一级指针


如果`dd1`函数的参数只能是一级指针,那么我们可以将`dd1`函数修改为返回一个指针,并在`main`函数中接收这个返回值来改变`m`的值。

下面是修改后的代码:
#include <stdio.h>

char* dd2()
{
    char* data = "ssss";
    return data;
}

char* dd1(char* data)
{
    char* result = dd2();
    // 修改data指向的值
    // ...
    return result;
}

int main()
{
    char* m = NULL;
    m = dd1(m);
    printf("%s\n", m);
    return 0;
}

在这个修改后的代码中,`dd1`函数的参数仍然是一级指针`char*`,但返回类型改为`char*`,即指向字符的指针。在`dd1`函数内部,我们调用了`dd2`函数来获取需要赋值给`m`的字符串指针,并将其存储在一个临时指针变量`result`中。根据你的需求,你可以在`dd1`函数中修改`data`指向的值。最后,`dd1`函数将`result`作为返回值返回给`main`函数,然后在`main`函数中将其赋值给`m`,实现了通过`dd1`函数改变`m`的值。

注意,在使用指针时要小心内存管理,确保分配和释放内存的正确性。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-25 17:04:15 | 显示全部楼层
FishC 发表于 2024-4-25 17:03
如果`dd1`函数的参数只能是一级指针,那么我们可以将`dd1`函数修改为返回一个指针,并在`main`函数中接 ...

dd1函数返回值只能是整型,参数只能是一级指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-25 17:04:38 | 显示全部楼层    本楼为最佳答案   
渔村暮火 发表于 2024-04-25 17:04
dd1函数返回值只能是整型,参数只能是一级指针


如果`dd1`函数返回值只能是整型,参数只能是一级指针,那么我们可以使用传入指针的方式来改变指针指向的值。以下代码演示了如何在这种情况下实现指针传值:
#include 

char* dd2()
{
    char* data = "ssss";
    return data;
}

int dd1(char* data)
{
    char* result = dd2();
    // 修改data指向的值
    // ...
    return 0;
}

int main()
{
    char* m = NULL;
    dd1(m);
    printf("%s\n", m);
    return 0;
}

在上述代码中,`dd1`函数的返回值类型为`int`,参数类型为一级指针`char*`。在`dd1`函数内部,我们调用`dd2`函数获取需要赋值给`m`的字符串指针,并将其存储在临时指针变量`result`中。根据你的需求,在`dd1`函数中你可以修改`data`指向的值。但请注意,由于`data`是一级指针,它所指向的值的更改只在`dd1`函数内部有效,不会影响到`main`函数中的`m`。

所以,最终在`main`函数中打印`m`的值时,输出结果仍然为空指针。由于`dd1`函数不能返回指针,我们无法通过直接调用`dd1`函数来实现改变`m`的值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-25 20:18:50 | 显示全部楼层

回帖奖励 +2 鱼币

oo
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-26 10:35:30 | 显示全部楼层

回帖奖励 +2 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-26 10:37:20 | 显示全部楼层

回帖奖励 +2 鱼币


用局部变量的指针作为返回值是不是会有问题阿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-2 17:01:36 | 显示全部楼层

回帖奖励 +2 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-6 14:13:39 | 显示全部楼层

回帖奖励 +2 鱼币

挺好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-7 15:49:21 | 显示全部楼层

回帖奖励 +2 鱼币

为了凑人气!冲!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2024-5-9 17:05:58 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2024-5-9 17:09:12 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2024-5-9 17:11:25 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2024-5-9 17:12:55 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2024-5-9 17:15:47 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2024-5-9 17:18:31 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表