c语言:为结构体指针的指针开辟空间

如:
struct stu
{
int *a;
}

main()
{
int i=0,j=0;
struct stu *p;
p=malloc(10*sizeof(p)); //为p开辟空间,成功
p->a=malloc(10*sizeof(int)); //不知道成功没
for(i=0;i<10;i++)
for(j=0;j<10;j--)
scanf("%d",&(info+i)->(a+j)); // error C2059: syntax error : '('

}

struct stu
{
int a[]; //!!
}; //--丢失逗号

int main()
{
int i=0,j=0;
struct stu *p;
// p=malloc(10*sizeof(p)); //为p开辟空间,成功
p= (stu*)malloc(10*sizeof(stu));//分配后的空间需要强转为stu* 才可以赋值给P类型一样。

if(p==NULL){ //检查申请是否成功
return false;
}
//p->a=malloc(10*sizeof(int)); //不知道成功没----对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑元素的对齐,并且需要是最大基本元素的整数倍。(参考下struct和union的内存对齐方式)
//所以不必再为结构体内部申请空间。 另外int *a, 申请多大的空间也没用啊 就一个int型 所以结构体里面定义为int a[]或者定义结构体数组。

for(i=0;i<10;i++){
for(j=0;j<10;j++){
scanf("%d",p->a+j); // error C2059: syntax error : '('----info 不知道你是怎么定义的,scanf("%d",p->a+j);
}
}

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-29
malloc默认分配的空间类型是 void* 。。所以一般使用malloc时,要加强制类型转化。。
p=( struct stu* )malloc(10*sizeof(p)); //为p开辟空间,成功
p->a=( int* )malloc(10*sizeof(int)); //不知道成功没
malloc分配失败 返回NULL
if( p->a=( int* )malloc(10*sizeof(int)) == NULL )
{
//分配失败语句
}
else
{
//分配成功语句
}
第2个回答  2011-11-29
可以用 malloc 来申请空间 然后返回值可以给指针

参考网址:http://baike.baidu.com/view/736228.htm追问

我补充提问了,希望您可以看看

第3个回答  2011-11-29
struct XX *pS;
pS = (struct XX *)malloc(sizeof(struct XX));
第4个回答  2011-11-29
struct stu
{
int a;
}*pa;
pa=(stu *)malloc(sizeof(stu));
相似回答