1. 只有在sizeof(arr),&arr这两种状况下,arr示意的整个数组,而sizeof()计算传入元素类型的大小
2. strlen函数的形参为一个常量指针,即const char*str,这示意传入strlen中的应该是某个地址,且strlen在计算长度时
3. char*p=“abcdef”,实际上p寄存的是a的地址,即字符串首元素的地址


  1. 注:p+0x1是构造体指针+1,跳过一个构造体,所以地址+20,又因为是16进制,所以,地址为0x00100014**
    (unsigned long)p+0x1,首先把指针p强转为无符号整型,所以P+0x1就相当于是一个无符号整数+1
    (unsigned int*)p+0x1先把p强转成无符号整型指针,所以p+0x1相当于跳过一个整型

8.
注:零碎采纳小端存储模式,&a+1跳过了整个数组,如图,指针ptr指向数组开端前面的空间,再再将其强转成int的指阵类型,所以ptr[-1]等价于*(ptr-1)即向前跳了一个整型,再解援用
(int)a+1将数组首元素地址转化为一个整型,假如数组首元素的地址为0x00 00 00 05,强转为整型后+1相当于5+1=6,再把6强转成地址,即0x00 00 00 06即向前跳过一个字节,再解援用*ptr为00 00 00 02,计算机打印时按高地址到低地址打印,所以%x为0x 2 00 00 00


9.
注:逗号表达式,在(x,y)示意的最初一个y


10.
注:p的类型为int(*)[4]

a的类型为int(*)[5],&p[4][2] 等价于*(*(p+4)+2),即为第19个存储空间,同理*(*(a+4)+2)为第23个存储空间,而地址-地址=元素个数,所以,&p[4][2]-&a[4][2]=-4,当-4以地址的模式打印的时候,间接打印其补码11111111111111111111111111111100转化为16进制为FFFFFFFC

11.
正文:后果为at,char**pa二级指针,寄存的是一级指针的地址


12.

注:char***cp是一个三级指针,寄存的是数组cp的首元素的地址,cp是一个寄存指针地址的数组,每个数组元素寄存的是指针数组c的每个元素的地址,而数组c又别离寄存了四个字符串的首元素的地址,并将其作为元素存储。存储示意图如上图所示,1.**++cpp,此时指针cpp会指向cp数组的第二个元素,即c+2,再通过两次解援用找到了字符串“POINT”的首地址,以%s的模式打印,便打印整个“POINT”字符串2.*--*++cpp,首先指针cpp自增1,持续向数组cp的下一个元素挪动,即指向了c+1元素,解援用,即找到了c+1寄存的地址,即找到了数组c的第二个指针元素。接着--操作符,使得找到了c数组的第一个指针元素,再解援用,失去了"ENTER"的首元素地址,再+3即第四个字符E打印字符串,所以后果为“ER”。3.*cpp[-2]+3等价于**(cpp-2)+3,此时cpp自身并不挪动,但cpp-2找到了cp数组的c+3元素,解援用,失去c+3指向的元素的地址,即数组c的最初一个元素的地址,再次解援用,失去了c数组最初一个指针寄存的字符串元素的首地址,最初+3,即从S开始打印字符串,后果为“ST”4.cpp[-1][-1]等价于*(*(cpp-1)-1),cpp-1找到了C+2,解援用找到了对应的c数组第三个元素的地址,-1,找向c数组上一个元素,再解援用,失去了“NEW”的首元素地址,+1,向后找到了“E”,从此处开始打印字符串,所以后果为“EW”