20150507结构体
Posted wzg31796
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.
以上是关于20150507结构体的主要内容,如果未能解决你的问题,请参考以下文章