char**是指向char*的指针,而char*是一个int长度的数据,你声明了它,那么这个int型的数据便会有地址,而char**就是这个数据的地址。
首先你理解一下,为什么 char* 某些时候可以和 char[]等价呢?因为 char*指向的 a,实际上是 a[0]。所以 a 相当于 &a[0],它可以赋给 char*
但是char*只不过是 &a[0]罢了。和 char a[]是两回事儿,后者表示的是一块连续内存。
那么 &a 是什么东西?
我们已经知道了 a 是指 &a[0],是a[0]的地址,是一个int长度的数据。那么 &a 就是说,把这个数据当做了内存在某一块存在的数据,取这个数据的地址。
那么这个数据在内存中真的存在吗?不一定!
比如说 &a[0] 值为 0x3affffff,那么内存中一定存在某一块空间,里面的内容是 0x3affffff吗?不会!
所以 &a 是非法的!
所以,你使用 &a 本身就是非法的。
参考: