吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1271|回复: 4
收起左侧

[讨论] 关于c语言指针的讨论

[复制链接]
越行勤 发表于 2020-4-25 22:29
新人首次发帖有点激动,望给位带佬支持

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

这道题虽然比较简单  ,但 我用了 高大上的指针 ,便于提高我对指针的理解。先放题目
[url=][/url]

那么直接上代码

#include<stdio.h>
int main ()
{
    void swap(int array[3][3]);
    //这里用一下刚学的指针
    //void f(int a[3][3]);
    int a[3][3],i,j;
    int (*p)[3];
    /**************************
    必须有个(*p) 如果是int *p[3]就是一个全是指针的数组
    ***************************/
    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[3][3])//参数是一个数组  调用的话 把数组名给给就好了
{
    int temp,i,j;
    int (*p)[3];
    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[4]; //定义一个指针数组(个人理解 偏意词语偏向后面的词),该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续来再定义了。
    int (*p)[4]; //定义一个数组指针,该指针源指向含4个元素的一维数组(数组中每个元素是int型)。
    区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
    int p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组。
    int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。

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

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

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

    a[1]等价于*(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香不香
[Python] 纯文本查看 复制代码
print(' '.join([str(item) for item in filter(lambda x: not [x % i for i in range(2, x) if x % i == 0], range(2, 101))]))
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-15 17:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表