Why do I see a cast to signed integer on my unsigned array index?
4 次查看(过去 30 天)
显示 更早的评论
We explain here why even if the index of an array is unsigned, Polyspace says that there is conversion to signed integer
采纳的回答
MathWorks Support Team
2012-7-17
Example of implicit cast from unsigned to signed:
unsigned int r;
int tab[3] = {1,2,3};
void f(void) {
int x;
x = tab[r];
// check details on 'r' says :
// global variable 'r' (unsigned int 32): full-range [0 .. 2^32 -1]
// conversion from unsigned int 32 to int 32
}
The C Standard says that array indexes are (signed) integers. The reason behind that is that pointers and arrays are close in C.
For example, tab[index] is strictly equivalent to *(tab + index).
You can use pointer arithmetic with negative values, hence an array index can be negative.
Exemple of valid array access with a negative index:
void f(void) {
int x;
int *p;
int tab[3] = {1,2,3};
p = &tab[2]; // points to the 3rd element
x = p[-1]; // x is assigned to the second element, '2'
}
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Command-Line Only Options 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!