20150507结构体

一.结构体数组与指针
1.结构体数组动态分配内存
struct csdn
{
int id;
int num;
};




void main1x()
{
int num;
scanf("%d", &num);
struct csdn *p1 = malloc(sizeof(struct csdn)*num);//堆
struct csdn *p2 = alloca(sizeof(struct csdn)*num);//栈上
memset(p1, 0, sizeof(struct csdn)*num);
memset(p2, 0, sizeof(struct csdn)*num);
for (int i = 0; i < num; i++)//动态数组引用方式
{




printf("%d,%d    %d %d\n", p1[i].id = i, p1[i].num, p2[i].id = i, p2[i].num);
}
for (int i = 0; i < 10;i++)
{
int id;
scanf("%d", &id);


for (int j = 0; j < num;j++)
{
if (id==p1[j].id)  //注意i ,j
{
p1[j].num++;
p2[j].num++;
break;
}

}


}


for (int i = 0; i < num; i++)//动态数组引用方式
{




printf("%d,%d    %d %d\n", p1[i].id=i , p1[i].num , p2[i].id=i , p2[i].num );
}






//for (int i = 0; i < num;i++)//动态数组引用方式
//{
// printf("%d,%d    %d %d\n", p1[i].id=i, p1[i].num=i+2, p2[i].id=i+1, p2[i].num=i+3);
//}
free(p1);








system("pause");
}


2.结构体指针形式
void main2x()
{


//int num;
// scanf("%d", &num);
//三种用途
//struct csdn *p1 = malloc(sizeof(struct csdn)*num);//堆
struct csdn *p2 = (struct csdn[]){1,2,3,4};










printf("\n%d", p2[1].id);
printf("\n%d", (&p2[1])->id);
printf("\n%d", (p2+1)->id);//p[i] *(p+i)   &p[i]= p+i
printf("\n%d", (*(p2 + 1)).id);//指针的形式


//struct csdn  csdnx = { 10, 20 };
//struct csdn  *p = &csdnx;
//printf("\n%d", p->id);
//printf("\n%d", (*p).id);














system("pause");
}


3.结构体二维数组
void main()
{
struct csdn csdndata[100];  //int a[100]
struct csdn *p3 = csdndata;//int *p


struct csdn csdndataX[10][10];  //int a[10][10]
struct csdn(*p4)[10] = csdndataX;//int (*p)[10]=malloc(sizeof(int)*100)




struct csdn(*p5)[10] = malloc(sizeof(struct csdn) * 50);//
p5[3][4];




}


4.匿名结构体不可以创建变量


5.结构体至少有一个元素


6.匿名结构体如果有指针,指针可以开辟内存,就不可以锁定变量数量


7.数组名和指针的区别是:数组名是常量,指针是变量


8.结构体两种初始化方式:struct Mystruct my[]={10,10};
struct Mystruct *p=(struct Mystruct []){10,10};


9.结构体里面a.b等价于&a->b


10.(*结构体指针名).成员名==结构体指针名->成员名==结构体变量名.成员名


二.结构体大小与内存对齐
1.结构体与最大单位对齐是为了缩短内存寻址时间


2.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值