你的abc结构体,里面都是指针,后面申请的空间实际上是100个连续的字节空间,它将被解释为100/(4+4)=12.5个结构体数组元素.这样说来, 你这种申请内存, 可能为你后面的使用埋下了巨大的隐患.因为最后一个结构体只有一半的空间.后面如果定义了其他变量,它们可能被你覆盖.
另外,你必须要对malloc的返回指针进行显示的类型转换.你写的这个果断不能通过编译.还一堆错误在这里, 不严谨呀!
&既是取地址符号,一个指针p指向q就需要写作p=&q,在函数参数里是“引用”,就是别名,类似指针了,这种情况下对变量的修改会影响到函数外的原变量。
那个printf("a
=
%p\n",
&a);
等于求出地址xxxx然后作为指针看待(%p),所以也是yyyy了
楼主可以做个试验,看看输出结果地址间的关系,你就应该可以理解了
#include
#include
struct abc
{
char *p1;
char *p2;
}*a;
int main()
{
a = (struct abc*)malloc(100);
printf("%x %x %x\n",a, &(a->p1),&(a->p2));
printf("%x %x %x",a, a->p1,a->p2);
return 0;
}
只给指针分配了内存,没个指针指向的内容分配内存。
不是很清楚 应该成员都要分配空间的