越行勤 发表于 2020-4-25 22:29

关于c语言指针的讨论

新人首次发帖有点激动,望给位带佬支持{:1_887:}{:1_919:}

//首先 ,声明一下::本贴内容有我自己的理解 和其他大佬的讲解我把原文链接放出来了

这道题虽然比较简单,但 我用了 高大上的指针 ,便于提高我对指针的理解。先放题目
https://attach.52pojie.cn//forum/202004/25/222518r1hentatm4t5e5mz.png?l

那么直接上代码

#include<stdio.h>
int main ()
{
    void swap(int array);
    //这里用一下刚学的指针
    //void f(int a);
    int a,i,j;
    int (*p);
    /**************************
    必须有个(*p) 如果是int *p就是一个全是指针的数组
    ***************************/
    p=a;//把第零行的首个元素的地址给p
    printf("请给3*3的数组赋值\n");
    for(i=0;i<3;i++)
      for(j=0;j<3;j++)
    {
      scanf("%d",(*(p+i)+j));
    }
    printf("输入数组为\n");
    for(i=0;i<3;i++)
    {
      for(j=0;j<3;j++)
      {
            printf("%2d", *(*(p+i)+j));
      }
      printf("\n");
    }
    swap(a);
    for(i=0;i<3;i++)
    {
      for(j=0;j<3;j++)
      {
            printf("%2d", *(*(p+i)+j));
      }
      printf("\n");
    }
    return 0;
}
void swap(int array)//参数是一个数组调用的话 把数组名给给就好了
{
    int temp,i,j;
    int (*p);
    p=array;
    for(i=0;i<3;i++)
      for(j=i+1;j<3;j++)//如果j=0的话那就又换回去了
      {
            temp= *(*(p+i)+j);
            *(*(p+i)+j)= *(*(p+j)+i);
            *(*(p+j)+i)= temp;
      }
    printf("swap over ^_^\n");
}
   /*************
    int *p; //定义一个指针数组(个人理解 偏意词语偏向后面的词),该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续来再定义了。
    int (*p); //定义一个数组指针,该指针源指向含4个元素的一维数组(数组中每个元素是int型)。
    区分int *p; 和int (*p); 就要看运算符的优先级了。
    int p; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组。
    int (*p); 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。

    原文博客:https://blog.csdn.net/weixin_44720916/article/details/105621896
    ***************************/

    /******************************
    指针上加减1等于他存的地址加减他存的一个单位元素所占的字节长度
    *取值操作符,&取址操作符
    ********************************
    说明:
    现有一个一维数组,那么a就是首元素的地址,现在有一个
    二位数组,那么 a指的是第0行的首元素的地址(a可以看成指针
    但是数组字母虽然表示指针但是他是不能修改的左值即不能执行++运算等),
    *********************************
    (可以把二维数组看成一维数组的数组),再简单来看假如有数组int a
    那么 可以看成一个一维数组b有三个元素,一个元素长(int 4字节)4*3字节
    那么a+1()指的是第1行的元素第0个元素地址&a
    a+2()指的是第2行的第0个元素地址 &a

    a+1那指的是第行第一列的元素地址&a

    a等价于*(a+1)
    *************************
    信息来源于博客,以及个人理解
    https://blog.csdn.net/zj490044512/article/details/86353764
    *******************************
    那么再来说明指针数组
    int(指向数组类型) *p[二维数组的列数(一行的长度)]
    在深入一点就是可以分解成多少个一维数组,该一维数组的长度
    *(*(p+i)+j)指的是第i行第j列的元素的值
    ******************************/
本人小学生水平,若有错误欢迎大家批评

sam喵喵 发表于 2020-4-26 00:43

可以去看看传智C,指针这一块讲的很透彻。一定要自己动手敲代码。

A学习的小菜鸟 发表于 2020-5-3 16:01

其实你说的这道题,根本就不需要使用指针,只需要两个循环加上赋值,就可以了,其实指针没你想得那么复杂,他就是个类型而已,主要是,你要知道为什么用指针,什么时候用它,如果这个不搞清楚,那么指针会把你搞蒙的,我原来也是怕指针,但是我明白了前面的两个问题后,现在感觉指针很亲切的

399713194 发表于 2020-5-5 17:30

cube 发表于 2020-5-5 19:20

python香不香
print(' '.join(, range(2, 101))]))
页: [1]
查看完整版本: 关于c语言指针的讨论