结构体变量名.成员名
对于定义为指向结构体的指针变量,用箭头运算符(“->”)访问,标准的访问形式如下:
指向结构体的指针变量名->成员名
当出现结构体嵌套时,访问结构体成员:
指向结构体的指针变量名 -> 次结构体名 .成员名
实例:
#include "stdafx.h"
#include <windows.h>
//#include "log.h"
#include "msglog.h"
#include "stdlib.h"
int b;
typedef struct _Atmp
{
int d;
int *e;
} Atmp;
typedef struct _Bdata
{
int a;
char *s;
struct Ctmp
{
int b;
int c;
} FF ;
Atmp *atmp;
Atmp EE;
} dataA, *dataB;
int _tmain(int argc, _TCHAR* argv[])
{
int X=3,Y=5;
dataA *A=(dataA *)malloc(sizeof(dataA));
memset(A,0,sizeof(A));
A->a=0;
A->s="Test A!";
//A.tmp.b=X;
//A.tmp.c=Y;
A->atmp = (Atmp *)malloc(sizeof(Atmp));
A->atmp->d=X;
A->atmp->e=&Y;
A->FF.b=X;
A->EE.d=X;
A->EE.e=&Y;
dataA B;
B.a=X;
B.s="TEST B";
B.FF.b=X;
B.FF.c=X;
B.EE.d=X;
B.EE.e=&Y;
B.atmp=(Atmp *)malloc(sizeof(Atmp));
B.atmp->d=X;
B.atmp->e=&Y;
dataB C=(dataB)malloc(sizeof(dataB));
memset(C,0,sizeof(dataB));
C->a=X;
C->s="Test C";
C->FF.b=X;
C->FF.c=X;
C->atmp=(Atmp *)malloc(sizeof(Atmp));
C->atmp->d=X;
C->atmp->e=&Y;
C->EE.d=X;
C->EE.e=&Y;
return 0;
}
枚举类型:
#include "stdafx.h"
#include "msglog.h"
#define A_TEST_a
typedef enum _CHAR_TYPE
{
A_TEST,
B_TEST,
C_TEST,
D_TEST
} CHAR_TYPE;
int _tmain(int argc, _TCHAR* argv[])
{
int a,b;
a=3;b=4;
#ifdef A_TEST
a=5;
#endif
enum _CHAR_TYPE AA=A_TEST;;
switch(AA)
{
case A_TEST:a=10;break;
}
LOG(LEVEL_INFO,"AA=%d\n",a);
CHAR_TYPE BB=B_TEST;
switch(BB)
{
case B_TEST: a=15; break;
case C_TEST: a=20;
default: a=30;
}
LOG(LEVEL_INFO,"BB=%d\n",a);
int AB=3;
switch(AB)
{
case D_TEST :a=40;break;
}
LOG(LEVEL_INFO,"AB=%d\n",a);
int c=20;
CHAR_TYPE CC=(CHAR_TYPE)20; //数值强制转化为枚举类型才能赋值
return 0;
结果:
AA=10
BB=15
AB=40
结构体重常用的指针转换
#include "stdio.h"
#include "string.h"
#define NumSize 100
typedef struct _test
{
int a;
} test;
typedef struct _testA
{
int c;
int d;
char a[NumSize];
} testA;
int main()
{
testA bb,dd;
int cc;
bb.c=10;//bb.d=20;
bb.a[1]='A';
// bb.a[]="abc";//错误
test *aa;
aa=(test *)&bb;//记住地址需要转换
printf(" aa->a =%d \n",aa->a);
static char c[]="BASIC_dBASE";
char b[80]="Study C Programme!\n";
printf("c[]=%s \n",c);
printf("b[100]= %s \n",b);
memset(bb.a,0,sizeof(char)*NumSize);
memcpy(bb.a,b,sizeof(char)*strlen(b));
printf("bb.a = %s \n",bb.a);
// dd.a=b; //错误
char *ff;
ff="abc";
printf(" ff = %s \n",ff);
int *gg,kk;
gg =(int *)&bb;
kk =*(int *)&bb;
printf(" gg = %d ,kk= %d\n",*gg,kk);
int *gg,kk;
gg =(int *)&bb; //指针转换
kk =*(int *)&bb;
printf(" gg = %d ,kk= %d\n",*gg,kk);
char *s="keil is wv \n";
// s[1]='z'; //s为栈内指针,指向常量存储区,所以不能改变常量存储区的值
printf(" s = %s \n",s);
char sz[]="keil is wv\n";
sz[2]='s';//sz为栈内指正,同时指向的字符串同样是在栈内,所以能够用此方式改变变量值
printf(" sz = %s \n",sz)
return 0;
return 0;
}
结果:
aa->a =10
c[]=BASIC_dBASE
b[100]= Study C Programme!
bb.a = Study C Programme!
ff=abc;
gg = 10 ,kk=10
s = keil is wv
sz = kesl is wv