c语言指针数组用法
C语言函数指针函数指针数组的用法
*pointer1//该指针指向从该地址开始一个1字节的内容
shortint*pointer2;//该指针指向从该地址开始一个2字节的内容
longint*pointer3;//该指针指向从该地址开始一个4字节的内容
longlongint*ponter4;//该指针指向从该地址开始一个8字节的内容
pointer1++使其对应内存地址移动一个字节
pointer2++使其对应内存地址移动两个字节
pointer3++使其对应内存地址移动三个字节
pointer4++使其对应内存地址移动四个字节
typedefvoid(*FUNC)(void);//定义函数指针类型FUNC
C语言中使用结构体
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:
struct结构体名{
结构体所包含的变量或数组
};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
结构体定义:
第一种:只有结构体定义
structstuff{
charjob[20];
intage;
floatheight;
};
第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义
//直接带变量名Huqinwei
structstuff{
charjob[20];
intage;
floatheight;
}Huqinwei;
也许初期看不习惯容易困惑,其实这就相当于:
structstuff{
charjob[20];
intage;
floatheight;
};
structstuffHuqinwei;
第三种:如果该结构体只用一个变量Huqinwei,而不再需要用structstuffyourname;去定义第二个变量。
那么,附加变量初始化的结构体定义还可进一步简化出第三种:
struct{
charjob[20];
intage;
floatheight;
}Huqinwei;
把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。
结构体变量及其内部成员变量的定义及访问。
要分清结构体变量和结构体内部成员变量的概念。
就像刚才的第二种提到的,结构体变量的声明可以用:
structstuffyourname;
其成员变量的定义可以随声明进行:structstuffHuqinwei={"manager",30,185};
也可以考虑结构体之间的赋值:
structstufffaker=Huqinwei;
//或structstufffaker2;
//faker2=faker;
打印,可见结构体的每一个成员变量一模一样
如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)
Huqinwei.job[0]='M';
Huqinwei.job[1]='a';
Huqinwei.age=27;
Huqinwei.height=185;
结构体成员变量的访问除了可以借助符号".",还可以用"->"访问。
扩展资料:
结构体数组与结构体指针:
一个结构体变量中可以存放一组数据;如一个学生的学号、姓名、成绩等数据。如果有10个学生的数据需要参加运算显然应该用数组,这就是结构体数组结构体数组与以前介绍过的数值型数组不同之处:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项。
结构体指针和其他类型的指针都是一样的理解,在32位平台不管啥类型的指针都占4个字节的空间。
结构体指针就是指向结构体变量的指针;如果一个指针变量中保存了结构体变量的首地址,那么这个指针变量就指向该结构体变量.通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的结构指针变量说明的一般形式为:
struct结构体名*结构体指针变量名structstudent*p=&Boy;//假设事先定义了structstudentBoy。
c语言关于指向结构体的指针的理解
1、structs{charc;inti;};struct*p1;/*p1是指向s结构体的指针*/2、typedefstruct{charc;inti;}s,*ps;s*p2;/*p2是指向结构体的指针*/psp3;/*p3是指向s结构体的指针*/
结构体指针如何初始化
比如:结构体如下:typedefstruct{void* Input;void* Output;volatilevoid* DmaBaseAddr;volatileunsignedint* ITU656Reg;volatileunsignedint* ITUResetReg;}ITUManager;代码如下:structITUManager{void*Input;void*Output;volatilevoid*DmaBaseAddr;volatileunsignedint*ITU656Reg;volatileunsignedint*ITUResetReg;}*Itu=NULL;
数据结构为什么定义typedefintEl
类型定义符typedefC语言不仅提供了丰富的数据类型,而且还允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取“别名”。类型定义符typedef即可用来完成此功能。例如,有整型量a,b,其说明如下:inta,b;其中int是整型变量的类型说明符。int的完整写法为integer,为了增加程序的可读性,可把整型说明符用typedef定义为:typedefintINTEGER这以后就可用INTEGER来代替int作整型变量的类型说明了。例如:INTEGERa,b;它等效于:inta,b;用typedef定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性。例如:typedefcharNAME[20];表示NAME是字符数组类型,数组长度为20。然后可用NAME说明变量,如:NAMEa1,a2,s1,s2;完全等效于:chara1[20],a2[20],s1[20],s2[20]又如:又如:typedefstructstu{charname[20];intage;charsex;}STU;定义STU表示stu的结构类型,然后可用STU来说明结构变量:STUbody1,body2;typedef定义的一般形式为:typedef原类型名新类型名其中原类型名中含有定义部分,新类型名一般用大写表示,以便于区别。有时也可用宏定义来代替typedef的功能,但是宏定义是由预处理完成的,而typedef则是在编译时完成的,后者更为灵活方便。
typedef用法
typedef用法如下。
1、隐藏笨拙且难以理解的语法,使用typedef为现有类型创建别名,定义易于记忆的类型名。typedef还可以掩饰复合类型,如指针和数组。
2、typedef的最简单使用,给已知数据类型long起个新名字,例如叫byte_4。
3、typedef与结构结合使用,这语句实际上完成两个操作:
1)定义一个新的结构类型。
2)typedef为这个新的结构起了一个名字,叫MyStruct。
4、typedef和define的问题,typedef要比define要好,特别是在有指针的场合。
5、define宏定义有一个特别的长处:可以使用ifdef,ifndef等来进行逻辑判断,还可以使用undef来取消定义。