c语言,二级指针取值加1为什么不能赋值?

#include<stdio.h>#include<stdlib.h>typedefstructstudent{intnum;charname[20];intscore1... #include<stdio.h>
#include<stdlib.h>

typedef struct student
{
int num;
char name[20];
int score1;
int score2;
int score3;
}stu,*pstu;

void row(pstu *p)//pstu本来就是一级指针,那么定义的p就是二级指针
{
int i,j;
pstu t;//定义一个结构体指针
for(i=4;i>0;i--)
{
for(j=0;j<i;j++)
{
if((*p+j)->num>(*p+j+1)->num)
{
t=*p+j+1;
*p+j+1=*p+j;//为什么这里要报错“表达式必须是可修改的左值“呀
*p+j=t;
}
}
}
}
int main()
{
stu arr[5];
pstu p;
int i;
p=arr;
for(i=0;i<5;i++)
{
scanf("%d%s%d%d%d",&arr[i].num,arr[i].name,&arr[i].score1,&arr[i].score2,&arr[i].score3);
}
row(&p);
for(i=0;i<5;i++)
{
printf("%d%s%d%d%d\n",arr[i].num,arr[i].name,arr[i].score1,arr[i].score2,arr[i].score3);
}
system("pause");
return 0;
}
展开
 我来答
GTA小鸡
高粉答主

2018-07-12 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部

你的程序写得不对,这里根本不需要使用二级指针,主函数中的p就是指针。

void row(pstu p)
{
    int i,j;
    stu t;
    for(i=4;i>0;i--)
    {
        for(j=0;j<i;j++)
        {
            if((p+j)->num>(p+j+1)->num)
            {
                t=*(p+j+1);
                *(p+j+1)=*(p+j);
                *(p+j)=t;
            }
        }
     }
}

主函数调用形式为row(p);

追问
嗯嗯,我知道一级指针做要方便点,但是想通过二级指针解引用冒泡排序修改数组的地址,为什么我的那个程序*p+j不能赋值给*p+j+1呢?很纠结这个问题,谢谢解答
追答
因为左值应该是地址解引用的内容,而不是地址本身。如果使用二级指针,等价的写法应该是:
*t=*(*p+j+i);
*(*p+j+1)=*(*p+j);
*(*p+j)=*t;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式