Chinaunix

标题: 关于一个指针的指针的问题 [打印本页]

作者: linbe_ice    时间: 2008-02-21 16:09
标题: 关于一个指针的指针的问题
编写了一个函数如下:
#include <stdio.h>
int test1(int **number)
{
    *number = 1;
}
int main()
{
    int *number;
    test1(&number);
    printf("number=%d",*number);
}

编译出现警告,执行时出现错误,请问一下哪里出现了错误,为什么?
谢谢!
作者: cugb_cat    时间: 2008-02-21 16:13
printf("number=%p", number);
作者: linbe_ice    时间: 2008-02-21 16:20
原帖由 cugb_cat 于 2008-2-21 16:13 发表
printf("number=%p", number);


谢谢楼上,编译还是出现同样的警告,但执行通过了,结果是正确的,
但我不明白我的错在哪了?是否能告知,谢谢!
作者: ck_lai    时间: 2008-02-21 17:03
原帖由 linbe_ice 于 2008-2-21 16:20 发表
谢谢楼上,编译还是出现同样的警告,但执行通过了,结果是正确的,
但我不明白我的错在哪了?是否能告知,谢谢!


结果正常?不会吧?
你预期的是一个什么的结果?
程序等价于:

int main()
{
    int *number = 1;
    printf("number=%d",*number);
}

这应该会出错吧
错了请纠正;
作者: cugb_cat    时间: 2008-02-21 17:06
原帖由 ck_lai 于 2008-2-21 17:03 发表


结果正常?不会吧?
你预期的是一个什么的结果?
程序等价于:

int main()
{
    int *number = 1;
    printf("number=%d",*number);
}

这应该会出错吧
错了请纠正;

你看错了。
作者: ck_lai    时间: 2008-02-21 17:12
我编译运行过了,Segmentation fault阿!!
作者: Edengundam    时间: 2008-02-21 17:22
不fault还做什么??

1. 函数参数名称与实际参数名称同名, 但类型不同 ==> 不好.
2. 函数中*number = 1 类型不匹配 ==> 警告;
3. print时候, 解引用地址1...==> 找死....
作者: ck_lai    时间: 2008-02-21 17:25
原帖由 Edengundam 于 2008-2-21 17:22 发表
不fault还做什么??

1. 函数参数名称与实际参数名称同名, 但类型不同 ==> 不好.
2. 函数中*number = 1 类型不匹配 ==> 警告;
3. print时候, 解引用地址1...==> 找死....



我不是编译运行我的那个等价的程序,是LZ的程序。。。
作者: Edengundam    时间: 2008-02-21 17:27
原帖由 ck_lai 于 2008-2-21 17:25 发表



我不是编译运行我的那个等价的程序,是LZ的程序。。。


都一样...都等价还不是都死....int *numbe = 1; *number..对1解引用???
作者: ck_lai    时间: 2008-02-21 17:30
我也认为是等于对地址1的解引用阿,我觉得应该是错的阿,但是实习
斑竹说我看错了所以就编译运行来看看咯,呵呵
作者: Edengundam    时间: 2008-02-21 17:32
原帖由 ck_lai 于 2008-2-21 17:30 发表
我也认为是等于对地址1的解引用阿,我觉得应该是错的阿,但是实习
斑竹说我看错了所以就编译运行来看看咯,呵呵



cat的修改:
printf("number=%p", number);

是阻止了惨剧的发生.

所以说你看错了. 编译警告是1赋值的过程.
作者: zx_wing    时间: 2008-02-21 17:34
原帖由 ck_lai 于 2008-2-21 17:30 发表
我也认为是等于对地址1的解引用阿,我觉得应该是错的阿,但是实习
斑竹说我看错了所以就编译运行来看看咯,呵呵

你看对了的,版主应该是误会你的意思了。
你看版主把打印解引用1的地址改成打印地址1了,就知道你和版主看的其实是一样的。
作者: ck_lai    时间: 2008-02-21 17:35
呵呵,明白明白,谢谢指教
作者: xi2008wang    时间: 2008-02-22 14:20
#include <stdio.h>
int test1(int **number)
{
    *number = (int *)1;//强制转换
}
int main()
{
    int *number;
    test1(&number);
    printf("number=%p\n",number);
}
作者: linbe_ice    时间: 2008-02-22 21:45
谢谢楼上的各位,明白了!
作者: anyche    时间: 2008-02-22 22:58
谢谢分享!!!!!!!!!!!!!支持!!!!!!!!!!!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2