闪闪红星向太阳 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条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?