yes. 1 is ONE integer with a VALUE of 20.
2 is 20 integers in an 'array' / memory block format, with unknown value.
so
int *p3 = new int[100](); is 100 integers all set to 0, but for some reason you can't do a block set this way, it only supports zero initialize if I understand it correctly (I don't use this syntax).