闪闪红星向太阳 2015-08-11 00:38 采纳率: 100%
浏览 2880
已采纳

关于结构体指针问题。什么时候在指针前面加*号,什么时候不加

我在做一道对结构体数组,按姓名升序进行冒泡排序的题的时候有些不理解指针什么时候加“*”什么时候不加*。

下面上我的代码。
结构体定义

 typedef struct array{
    int a;
    char b;
}Array;

为结构体赋值

 Stu student[5] = {
        {"uioyi",'m',95,58},
        {"asdf",'m',88,28},
        {"cvb",'m',93,37},
        {"aa",'m',60,49},
        {"tyu",'m',99,57}
    };

下面重点来了,函数

void sortedByName(Stu *p,int count){
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - 1 - i; j++) {
            if (**strcmp((p + j) -> name, (p + j + 1) -> name)** > 0 ) {
                Stu temp = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = temp;
            }
        }
    }
}

请大神为我回答一下,在函数if比较的冒泡排序中,为什么strcmp函数中俩个相比较的指针(p + j) -> name和(p + j + 1) -> name前面为什么不能加*。
但是为什么下面进行冒泡排序赋值的时候就必须要加*

  • 写回答

5条回答 默认 最新

  • inc1ud3 2015-08-11 01:37
    关注

    (p+j)->name已经是字符串了不需要加*,举个例子吧,定义一个结构体

     typedef struct Stu {
         char name;
         int age;
     };
     //在声明一个这个结构体的变量
     struct Stu stu1;
     //定义一个指针
     struct Stu *p;
     p=&stu1;
     p->name = stu1->name;
    

    去访问结构体stu1里面的成员时,使用stu1->name;那么将stu1的地址传给指针p即:p=&stu1,那么stu1和指针p存储的
    都是这个结构体变量的内存地址,可以stu1->name,也就可以p->name;
    后面的赋值运算是对结构体变量的赋值,当然要使用解引用符了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的