回复 3楼 peter张
先要理解指针的两个重要特性:地址和大小。
地址...是指针表达的存储数据的地方。
大小...是指针表达的存储数据地方大小。
就此话题来说:
先看看 char **p;
p指针的地址属性是一个存放地址值的地方;p指针的大小属性是这个地方的大小,大小要看编译器环境:
设p的地址 0x100000。
16位编译为2Byte,p+1的地址 0x100002。
32位编译为4Byte,p+1的地址 0x100004。
64位编译为8Byte,p+1的地址 0x100008。
再看看 char str[][10]={"hello ","c program"};
str是数组名,表达的是数组的首址,具有指针的性质。
str的地址属性是一个存放一组数据的地方;str的大小属性是这个地方的大小,大小是10Byte。
设str的地址 0x100000。
str+1的地址 0x10000A。
str+2的地址 0x100014。
可见,用char **p通过p+1来表达str+1不切实际,除非是很确定p+i==str+i(硬来的)。