伦姆小姐拜托了 2022-04-22 11:33 采纳率: 0%
浏览 20

请教C语言中 二级指针括号内与括号外的区别

这是一个用二级指针对整数从小到大排序的程序。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{

    int a[7]={34,98,56,12,22,65,1};
    int *p[7],i,j,*t;
    for(i=0;i<7;i++)
        p[i]=&a[i];
    for(i=0;i<6;i++)//用冒泡排序
    {
        for(j=0;j<6-i;j++)
//现在以下if语句可以正常输出排序后结果。但修改为if(*(*p+j)>*(*p+j+1))输出的结果则没有排序
            if(**(p+j)>**(p+j+1))
                {
                    t=*(p+j);
                    *(p+j)=*(p+j+1);
                    *(p+j+1)=t;    
                }
    }    
    for(i=0;i<7;i++)    
        printf("% d",*p[i]);
     return 0;
}

这俩含义有什么区别吗?我用*(p+j)和*(p+j)单个输出数组一个数时候结果都是一样的,为什么排序的时候就不行了

后来输出了一下他们的地址,发现有的地址已经不是数组中的原地址,为什么还能输出..

img

  • 写回答

1条回答 默认 最新

  • 对象被抛出 2022-04-22 12:02
    关注

    int ** p[]和int * (* p)[]是不一样的
    int ** p[]表示p是一个int * 数组, 每一个p[i]都是int * 指针,
    int * ( * p)[]表示p是一个int数组, 但是这个int数组的命名, 地址都是未知, 可以灵活改变

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 4月22日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 带序列特征的多输出预测模型
  • ¥15 VB.NET读取电脑主板序列号
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错