The ab thus obtained is an unsigned integer variable. Ab is the address of the variable ab, that is, a pointer of type "unsigned int *". "(unsigned char*)" means cast, where the type of "unsigned int *" is changed to the type of "unsigned char *".
You can refer to the following code:
Unsigned int ab
Unsigned int * pui = & ab;
Unsigned char *pUC = (unsigned char *) pui;