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

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

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

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

 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 dev运行环境,c语言,报错是为什么?怎么改
  • ¥15 如何解决蓝牙通话音频突发失真问题
  • ¥15 安装opengauss数据库报错
  • ¥15 【急】在线问答CNC雕刻机的电子电路与编程
  • ¥60 在mc68335芯片上移植ucos ii 的成功工程文件
  • ¥15 笔记本外接显示器正常,但是笔记本屏幕黑屏
  • ¥15 Python pandas
  • ¥15 蓝牙硬件,可以用哪几种方法控制手机点击和滑动
  • ¥15 生物医学数据分析。基础课程就v经常唱课程舅成牛逼
  • ¥15 云环境云开发云函数对接微信商户中的分账功能