- 论坛徽章:
- 0
|
下面这个程序
void main(){
char **ppWData;
ppWData = (char **)malloc(sizeof(char *) * 4);
char pFill[10]="abc";
int i=0;
for(i = 0; i < 4; i++){
*(ppWData + i) = pFill;
}
abc(ppWData);
}
void abc(void *abc){
char *p;
p= (char*)((size_t*)abc)[2]; //没看懂?
printf("%s\n",p);
}
上面这个程序,先定义一个双指针ppwData,ppwData指向的地址空间是大小为4的数组,数组里面存的是char*。
然后给每个char*赋值。之后传一个char**类型的参数,用void*来接收。为什么这么做,这么做有什么意义?
也就是说,ppwData里面存的地址,让abc来接收。那么abc虽然不是char**,也指向了这4个char*的第一个char*的首地址。
p= (char*)((size_t*)abc)[2]; 这段代码的执行顺序是不是((size_t*)abc) -〉((size_t*)abc)[2]; -〉 (char*)((size_t*)abc)[2]; 这样的?
(char*)和(size_t*)都是强制转换?第一步,为什么转成(size_t*)?第2步,加个[2],是不是说取出abc这个数组的第2个元素的值?然后应为这个值是一个char*的地址,
所以第三步就把他强转为char*了?
谢谢! |
|