程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 冒泡排序-關於結構體指針問題。什麼時候在指針前面加*號,什麼時候不加

冒泡排序-關於結構體指針問題。什麼時候在指針前面加*號,什麼時候不加

編輯:編程綜合問答
關於結構體指針問題。什麼時候在指針前面加*號,什麼時候不加

我在做一道對結構體數組,按姓名升序進行冒泡排序的題的時候有些不理解指針什麼時候加“*”什麼時候不加*。

下面上我的代碼。
結構體定義

 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前面為什麼不能加*。
但是為什麼下面進行冒泡排序賦值的時候就必須要加*

最佳回答:


(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;
後面的賦值運算是對結構體變量的賦值,當然要使用解引用符了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved