Почему на выходе следующая программа 84215045
?
int grid[110];
int main()
{
memset(grid, 5, 100 * sizeof(int));
printf("%d", grid[0]);
return 0;
}
memset(grid, 5, 100 * sizeof(int));
Вы устанавливаете 400 байтов, начиная с (char*)grid
и заканчивая (char*)grid + (100 * sizeof(int))
, значением 5
(здесь необходимо преобразование, потому что memset
имеет дело с байтами , в то время как арифметика указателей имеет место в objects
.
84215045
в шестнадцатеричном виде 0x05050505
, поскольку int
(на вашей платформе / компиляторе и т. д.) представляется четырьмя байтами, когда вы его печатаете, вы получите «четыре пятерки».
Поскольку memset записывает байты, я обычно использую его для установки массива int на ноль, например:
int a[100];
memset(a,0,sizeof(a));
, или вы можете использовать его для установки массива char, поскольку char - это точно байт:
char a[100];
memset(a,'*',sizeof(a));
Более того, массив int также может быть установлен в -1 с помощью memset:
memset(a,-1,sizeof(a));
Это потому, что -1 равно 0xffffffff в int и 0xff в char ( байт).