结构体中 “

您所在的位置:网站首页 c结构体是什么 结构体中 “

结构体中 “

2024-07-12 16:13| 来源: 网络整理| 查看: 265

结构体中 “->” 与 “.” 的区别以及使用

两者在同一个代码块内使用的时候其实没有什么太大不同,无非就是声明结构体的时候一个是声明指针,一个是声明结构体。声明结构体的时候分配了内存空间,所以可以用".“直接访问,而声明指针之后并没有分配内存空间,所以用”->“来指向开辟的空间。也可以用”(*buffer).foo" ,等价于"buffer->foo"。

"->"是在声明结构体指针时,访问结构体成员变量时使用。

"."是声明结构体时,访问结构体成员变量时使用。

typedef struct Buffer { int flag; int foo; int (*sum) (int, int); //函数指针 }Buffer; int main () { Buffer *buffer; Buffer buffer2; buffer->foo = 1; buffer2.foo = 5; printf("buffer foo : %d\r\n", buffer->foo); printf("*buffer foo : %d\r\n", (*buffer).foo); printf("buffer2 foo : %d\r\n", buffer2.foo); }

而当结构体作为函数变量传入的时候,就是以指针的方式传入,此时在传入函数中就是使用"->"

void bufferControl(Buffer *controlBuf) { if(controlBuf->flag) { controlBuf->flag = 0; } else controlBuf->flag = 1; }

整体测试用例

#include "stdio.h" typedef struct Buffer { int flag; int foo; int (*sum) (int, int); //函数指针 }Buffer; int sum1(int a, int b); void bufferControl(Buffer *controlBuf); int sum1(int a, int b) { return a+b; } int main () { Buffer *buffer; Buffer buffer2; buffer-> sum = sum1; buffer->foo = 1; buffer2.foo = 5; printf("buffer sum :%d\r\n", buffer->sum(1,2)); printf("buffer foo : %d\r\n", buffer->foo); printf("*buffer foo : %d\r\n", (*buffer).foo);// 等价buffer->foo printf("buffer2 foo : %d\r\n", buffer2.foo); buffer2.flag = 0; printf("buffer2 before controled: %d\r\n", buffer2.flag); bufferControl(&buffer2);//传入地址 printf("buffer2 after controled: %d\r\n", buffer2.flag); buffer->flag = 0; printf("buffer before controled: %d\r\n", buffer->flag); bufferControl(buffer);//传入地址 printf("buffer after controled: %d\r\n", buffer->flag); } void bufferControl(Buffer *controlBuf) //参数为结构体指针 { if(controlBuf->flag) { controlBuf->flag = 0; } else controlBuf->flag = 1; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3