警告比较整数和指针

时间:2017-02-20 02:50:54

标签: c

int b[5] = {1,2,3,4,5};
int *s = &b[0];
int *p = &b[1];
int *q = &b[2];
int *r = &b[2];

我的问题是,当我使用p < q < r比较if( p < q < r)时,我收到了警告信æ¯ã€‚

我的想法,首先是(p < q) == True,所以ä¸å¯èƒ½å°†å¸ƒå°”值与整数(r的地å€å€¼ï¼‰è¿›è¡Œæ¯”较。但是,当True被视为整数时,它是1.对å—?所以,1 < rå¯èƒ½æœ‰æ„义,我的猜测。

我的想法出了什么问题?

3 个答案:

答案 0 :(得分:2)

1 < rä¸èµ·ä½œç”¨ï¼Œå› ä¸º1是一个整数,而r是一个指针。因此警告。

我的猜测是你(a)æ„味ç€å–消引用指针,(b)需è¦ç”¨&&替æ¢é“¾å¼æ¯”较。

if (*p < *q && *q < *r)

答案 1 :(得分:1)

您似乎认为表达å¼p < q < r转æ¢ä¸ºâ€œpå°äºŽq,qå°äºŽrâ€ï¼Œè¿™æ˜¯å…¸åž‹çš„数学符å·ã€‚

但是,C编程语言ä¸ä¸€å®šéµå¾ªæ•°å­¦çº¦å®šã€‚ p < q < r实际翻译为p < q的内容å¯èƒ½ä¸º0或1,具体å–决于是å‡è¿˜æ˜¯çœŸï¼ŒåŽè·Ÿ0 < r或1 < r基于之å‰çš„差异。

正如å¦ä¸€ä½ç”¨æˆ·æŒ‡å‡ºçš„那样,写“på°äºŽq且qå°äºŽrâ€çš„正确方法是p < q && q < r。

答案 2 :(得分:0)

更改您的æ¡ä»¶ï¼š

if(p < q < r) {}

è¦ï¼š

if(p < q && q < r) {}