如: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;}
malloc默认分配的空间类型是 void* 。。所以一般使用malloc时,要加强制类型转化。。p=( struct stu* )malloc(10*sizeof(p)); //为p开辟空间,成功p->a=( int* )malloc(10*sizeof(int)); //不知道成功没malloc分配失败 返回NULLif( p->a=( int* )malloc(10*sizeof(int)) == NULL ){ //分配失败语句}else{//分配成功语句}