shaoguanfa 发表于 2014-12-29 14:31:28

我想问问这样的写法出错了? “”*“”有什么规则?

void main()
{
int a,b;
int *pointer_1, *pointer_2,*p;
scanf("%d,%d",&a,&b);
pointer_1 = &a;
pointer_2 = &b;
*p=*pointer_1>*pointer_2?*pointer_1:*pointer_2;
printf("%d,%d\n",a,b);
printf("%d\n",*p);
}上面的*p=*pointer_1>*pointer_2?*pointer_1:*pointer_2;
出错了吗?为什么出错呢?

语句不能使用吗?


shaoguanfa 发表于 2014-12-29 14:38:40

void main()
{
        int a,b;
        int *pointer_1, *pointer_2,*p;
        scanf("%d,%d",&a,&b);
        pointer_1 = &a;
        pointer_2 = &b;
        if(a>b) p=pointer_1;
        else p=pointer_2;

        printf("%d,%d\n",a,b);
        printf("%d\n",*p);
}这是第一种解法

这是第二种解法void main()
{
        int a,b;
        int *pointer_1, *pointer_2;
        scanf("%d,%d",&a,&b);
        pointer_1 = &a;
        pointer_2 = &b;
        printf("%d,%d\n",a,b);
        printf("%d\n",*pointer_1>*pointer_2?*pointer_1: *pointer_2);
}

最上面的为什么不行呢?语法错误吗?语法有什么规定吗?{:5_111:}

仰望天上的光 发表于 2015-1-1 20:06:55

自己加上括号。。。不然没人记得这些运算符的优先级

Boat 发表于 2015-1-3 22:31:18

鱼油们还是很活跃的嘛

907806863 发表于 2015-1-4 19:07:29

根据下面两个例子看出 你的代码改的不错哦,有想法。   没错 那句是错了 跟后面的运算没关系(应该是吧,三目运算记不清楚了)既然你已经在使用*pointer_1来表示变量a 那么你也就知道它们之间的关系,我就不废话了 。    错在*p=...........;    这个指针变量你是把它当做普通变量来用了吧 你那些指针变量没有出问题是因为你都有给它赋一个变量,然后通过*的形式等价的当做普通变量使用 而你的p指针变量没有赋给任何普通变量,而你却使用*p的形式 当然编译器会报错,编译器认准了指针变量是只能用来存存储单元地址的,不可以用来存其它东西,甚至被当作普通储存单元用 你这样用是不合适的(明明它自己也是存储单元呀,为什么不能存其它东西呢= =,郁闷! 哦呵呵 这是一个不错的Hacker行为出发点呦 学了更多知识后,你可以突破这个由蠢蠢的编译器所限制的规则 加油!)
页: [1]
查看完整版本: 我想问问这样的写法出错了? “”*“”有什么规则?