标题:这个错误该如何修改
只看楼主
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
结帖率:90.32%
已结贴  问题点数:20 回复次数:6 
这个错误该如何修改
#include<stdio.h>
#include<stdlib.h>
char *function() {
    char *a = "psa";
    return(a);
}
char *function1() {
    char b[3] = { 'b','c' };
    return(b);
}
void function2(){
    char *e="ughhh";
    printf("%p %s\n",e,e);
}
main() {
    function();
    printf("%p %s\n", function(), function());
    function1();
    printf("%p %s\n", function1(), function1());
    system("pause");
}
搜索更多相关主题的帖子: 错误 修改 char function printf 
2017-09-15 15:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
错误不是已经提示了吗
2017-09-15 16:12
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
得分:0 
以下是引用吹水佬在2017-9-15 16:12:00的发言:

错误不是已经提示了吗

意思是返回的类型与函数的类型不匹配,要把b定义为指针?比如char *b=NULL;
2017-09-15 16:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:6 
分配给局部变量存放数据的空间,在函数过程结束后会被释放,返回这个局部变量空间的地址是无意义,再使用这个地址有可能会出异常。

[此贴子已经被作者于2017-9-15 17:01编辑过]

2017-09-15 17:00
b1592187525
Rank: 1
等 级:新手上路
帖 子:86
专家分:4
注 册:2017-2-15
得分:0 
以下是引用吹水佬在2017-9-15 17:00:39的发言:

分配给局部变量存放数据的空间,在函数过程结束后会被释放,返回这个局部变量空间的地址是无意义,再使用这个地址有可能会出异常。

 下面这段代码局部变量aa存放数据的空间在函数过程结束后是不是也会被释放?如果也被释放为何主函数中an[0],an[1]的值也能被改变?
#include"stdio.h"
#include"stdlib.h"
void function(int aa[2]){
    int t;
    t=aa[1];
    aa[1]=aa[0];
    aa[0]=t;
}
main(){
    int an[2];
    while(1){
        scanf("%d%d",&an[0],&an[1]);
        function(an);
        printf("an[0]=%d an[1]=%d\n",an[0],an[1]);
    }
    system("pause");
}
2017-09-15 17:55
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:4 
回复 5楼 b1592187525
在函数中,如果参数是数组,会退化为指针。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-15 19:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:8 
以下是引用b1592187525在2017-9-15 17:55:56的发言:


 下面这段代码局部变量aa存放数据的空间在函数过程结束后是不是也会被释放?如果也被释放为何主函数中an[0],an[1]的值也能被改变?
#include"stdio.h"
#include"stdlib.h"
void function(int aa[2]){
    int t;
    t=aa[1];
    aa[1]=aa[0];
    aa[0]=t;
}
main(){
    int an[2];
    while(1){
        scanf("%d%d",&an[0],&an[1]);
        function(an);
        printf("an[0]=%d an[1]=%d\n",an[0],an[1]);
    }
    system("pause");
}

这样看看是否好理解点:
#include"stdio.h"
#include"stdlib.h"
void function(int *aa)
{
    int t;
    t=aa[1];
    aa[1]=aa[0];
    aa[0]=t;
}
main()
{
    int an[2];
    while(1)
    {
        scanf("%d%d",&an[0],&an[1]);
        function(an);
        printf("an[0]=%d an[1]=%d\n",an[0],an[1]);
    }
    system("pause");
}
aa是用来存放一个地址值的局部的指针变量,函数过程结束后会被释放,但只是释放aa变量自身,并不是释放放在aa里的那个地址表达的空间。
2017-09-15 20:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480725-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.370144 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved