在结构体的使用中,常会发现结构体内发现有指针变量或者用到结构体指针。在具体的使用过程中我们可以如下定义与引用就可以实现指针的正确使用:
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
//typedef int num;
struct class1
{
char name[15];
char *boy;
int num;
};
class1 *a;
class1 a1;
int _tmain(int argc, _TCHAR* argv[])
{
//结构体指针*a内部的初始化
a= (class1 *)malloc(sizeof(class1)); //结构体指针需要初始化
a->boy = (char*)malloc(sizeof(char)); //结构体指针的成员指针同样需要初始化,并且结构体成员的指针的初始化必须放
//在结构体指针之后,否者不可以执行
strcpy(a->name,"Lucy"); //将Lucy写入name
strcpy(a->boy,"Los");
a->num=1;
printf("%s\n",a->name);
printf("%s\n",a->boy);
printf("%d\n",a->num);
printf("------------------------------------------\n");
//结构体的a1的初始化
a1.boy=(char*)malloc(sizeof(char));//结构体的指针需要初始化
strcpy(a1.boy,"Jimy");//将Jimy写入
strcpy(a1.name,"zhuzhu");//将zhuzhu写入
a1.num=1;
printf("%s\n",a1.name);
printf("%s\n",a1.boy);
printf("%d\n",a1.num);
return 0;
}
//附上一段新的代码 包括不同类型的成员变量的初始化及显示方式
// struct_test1.cpp : 定义控制台应用程序的入口点。
//
//结构体数据类型的赋值及显示方式
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//先结构体类型,再定义结构体类型变量,定义常见的数据类型
struct stru //定义stru类型的结构体
{
int a;
int *c;
int num[4];
char str1;
char *str2;
char str3[4];
}*st1,st2; //定义结构体变量,这种方式等效于stru *st1;stru st2;
int _tmain(int argc, _TCHAR* argv[])
{
int i=11;
int test[4]={1,2,3};
char *str5="abc";
char str6[4]="def";
//结构体指针不同成员的赋值方式
st1=(stru *)malloc(sizeof(stru));//结构体指针使用要初始化
st1->c=(int *)malloc(sizeof(int));//结构体成员中的指针变量也要初始化
st1->a=1; //整型赋值
st1->c=&i; //整型指针的赋值
for(int k=0;k<4;k++)//整型数组赋值方式
{
st1->num[k]=test[k];
}
st1->str1='a';//字符型赋值,只能定义一个字符,多个字符如'abc'的话发生截断
st1->str2=str5;//字符指针的初始化 st1->str2=str6;也是可以的
for(int k=0;k<4;k++)//字符串数组赋值方式,或者用strcopy
{
st1->str3[k]=str6[k];
}
//各个类型的输出方式:
printf("结构成员的输出结果:\n");
printf("st1->a=%d,\nst1->c=%d,\nst1->str1=%c,\nst1->str2=%s\n",st1->a,*(st1->c),st1->str1,st1->str2);
//对于字符串数组及整型数组,可采用循环的方式输出
for(int k=0;k<4;k++)//字符串数组的输出方式一
{
printf("%c",st1->str3[k]);
}
//strcpy(st1->str3,"Los");
//printf("%s",st1->str3); //字符串数组及字符串指针的输出方式
printf("\n");
for(int k=0;k<4;k++)//整型数组的输出方式
{
printf("%d",st1->num[k]);
}
printf("\n");
//结构体变量成员赋值方式
st2.c=(int *)malloc(sizeof(int));//结构体成员中的指针变量也是需要初始化的
int j=10;
st2.a=0;
st2.c=&j;//指针变量的赋值方式
for(int k=0;k<4;k++)//数值的赋值方式
{
st2.num[k]=k;
}
st2.str1='v';
st2.str2=str5;
strcpy(st2.str3,"hel");
//输出成员变量
printf("st2.a=%d,\n*(st2.c)=%d,\nst2.str1=%c,\nst2.str2=%s,\nst2.str3=%s\n",st2.a,*(st2.c),st2.str1,st2.str2,st2.str3);
for(int k=0;k<4;k++)//整型数组的输出方式
{
printf("%d",st2.num[k]);
}
return 0;
}