您的位置:首页 > 其它

20150507结构体

2016-06-27 20:20 169 查看
一.结构体数组与指针

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: