我在做一道對結構體數組,按姓名升序進行冒泡排序的題的時候有些不理解指針什麼時候加“*”什麼時候不加*。
下面上我的代碼。
結構體定義
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;
後面的賦值運算是對結構體變量的賦值,當然要使用解引用符了。