结构体中 “ |
您所在的位置:网站首页 › c结构体是什么 › 结构体中 “ |
结构体中 “->” 与 “.” 的区别以及使用
两者在同一个代码块内使用的时候其实没有什么太大不同,无非就是声明结构体的时候一个是声明指针,一个是声明结构体。声明结构体的时候分配了内存空间,所以可以用".“直接访问,而声明指针之后并没有分配内存空间,所以用”->“来指向开辟的空间。也可以用”(*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 |