为什么这段代码“打印”什么? (C)

时间:2018-04-20 02:57:55

标签: c

int i,*ip;
main()
{
    i=5;
    ip=&i;
    *ip=&ip,printf("%d",i);
}

为什么这段代码“打印”什么?它实际上工作,并没有给出错误。 编辑:实际上这个代码打印的东西像635435,我认为,可能是ip的地址,但当ı使用-pedantic-errors标志这给我一个错误,所以我应该怎么说代码?这会输出ip的地址或出错。

1 个答案:

答案 0 :(得分:0)

语句*ip=&ip不正确,因为首先执行了*ip5表示5,而address of ip已被ip = (int*)&ip;/* need to typecast as you are assigning address of pointer to pointer variable which is not advisable */ 取代。它应该是

int i,*ip;
int main(void) { /* side note use int main() instead of just main() */
        i=5;
        ip=&i;
        ip=(int*)&ip,printf("%d\n",i);

        return 0;
}

您的代码看起来像

int main(void)

另外使用main()代替int main(void) { /* ... */ } ,如C规范所述

  

应使用返回类型int定义并且不带参数:

int main(int argc, char *argv[]) { /* ... */ }
     

或有两个参数(这里称为argc和argv,虽然可以使用任何名称,因为它们是本地的   到它们被声明的函数):

SELECT task.titolo, risposte.valore
FROM task
INNER JOIN risposte ON task.Id = risposte.id_task
WHERE task.ID_campagna=1
AND task.stato = 1
AND task.risultato = risposte.id