zoukankan      html  css  js  c++  java
  • 结构体->和 . 的区别(转载)

    引用结构体成员时,有时用点运算符( . ),时而是用箭头运算符( -> );两者之间的使用有什么区别?

    相同点:两者都是二元操作符,而且右边的操作数都是成员的名称。
    不同点:点运算符( . )的左边操作数是一个结果为结构的表达式;
                  箭头运算符( -> )的左边的操作数是一个指向结构体的指针。

     1 typedef struct          // 定义一个结构体类型:DATA
     2 {
     3     char key[10];       // 结构体成员:key
     4     char name[20];      // 结构体成员:name
     5     int age;            // 结构体成员:age
     6 }DATA;
     7     
     8 DATA data;              // 声明一个结构体变量
     9 DATA *pdata;            // 声明一个指向结构体的指针
    10     
    11 // 访问数据操作如下:
    12 data.age = 24;          // 结构体变量通过点运算符( . )访问
    13 pdata->age = 24;        // 指向结构体的指针通过箭头运算符( -> )访问

    如果一个函数的传入参数是结构体,且需要该结构体作为返回值的时候,必须采用指针传递的方式,其中对结构体赋值必须使用箭头运算符

    eg:

    1 int do_history(int acceptfd, MSG *msg, sqlite3 *db)
    2 {
    3     char sql[128] = {};
    4     char *errmsg;
    5 
    6     sprintf(sql, "select * from record where name = '%s'", msg->name);
    7  .......
    8 }

    如果只是想访问结构体成员,使用 . 

     1 int history_callback(void* arg,int f_num,char** f_value,char** f_name)
     2 {
     3     // record  , name  , date  , word 
     4     int acceptfd;
     5     MSG msg;
     6 
     7     acceptfd = *((int *)arg);
     8 
     9     sprintf(msg.data, "%s , %s", f_value[1], f_value[2]);
    10 
    11     send(acceptfd, &msg, sizeof(MSG), 0);
    12 
    13     return 0;
    14 }



  • 相关阅读:
    C语言中scanf()的用法
    Android学习笔记——Day3
    Android学习笔记——Day6
    Android学习笔记——Day5
    Android学习笔记——Day4
    Android学习笔记——Day2
    一个计时器按钮
    直方图均衡
    拉普拉斯算子进行图像边缘提取
    在jframe上显示超大号的文字
  • 原文地址:https://www.cnblogs.com/y4247464/p/12250823.html
Copyright © 2011-2022 走看看