如果将*p赋值W,则程序会崩溃,因为“abcdef”为常量字符串。加个const以后,谁想改都不可能,因为后面是常量字符串,加个const保证了代码的健壮性。
arr[1],arr[2]两个数组在定义时就已经在内存中开辟了空间,即使两个数组存储的内容一样,但是由于两个数组地址各不相同,所以arr[1]不等于arr[2]。
当为指针时,则多个指针可以指向同一地址,并且“abcdef” 在创建时只需要创建一个就可以了保证了内存的节省。
用()括住指针,防止[]的优先级干扰
数组指针一般不这么用。一般用在二维数组及以上
访问以arr为起始地址下标为i的元素。
strlen()参数部分需要的是一个地址,如果不是地址,那么将会将其转换为ascll码值,然后可能从该ascll码值所对应的地址开始,逐个往后数,直到找到“/0”为止,显然这样找程序是会崩溃的,所以这样的代码是一种错误的代码,相当于非法访问内存了。
对于strlen(&arr),运行时会报错,原因是类型不兼容(类型不相同):如果要存&arr那得是一个数组指针,因为首元素是字符所以为char,且是“‘数组’指针”所以,类型为char(*)[7],假设变量名称为p,所以char(*p)[7]=&arr,但是对于strlen来说,参数的类型应该为const char*。所以两个类型是不兼容的,所以会报错,但是可以运行