• 指针二维二维数组和二重指针 的疑问 二维数组名为什么不能直接赋值给二重指针


    在本文中,我们主要介绍指针二维的内容,自我感觉有个不错的建议和大家分享下

        #include <stdio.h>

        extern void print_double_point_address_value_p(int **p, int *p1);

        void main(){

        int array[3][2] = {10,11,12,13,14,15};

        int *array3[2];

        int **pa3 =&array3[0];    

        //int **dp = array;// 这种写法错在哪里?

        //int **dp = &array[0];// 这种写法错在哪里?

        int *dp1 = array[0];

        int **dp = &dp1;   这样就可以用二重指针拜访二维数组内的元素了

        printf("二维数组的首地址:               array = %p, &array[0] = %p \n", array, &array[0]);

        printf("二维数组的首地址的指向的地址:  *array = %p,  array[0] = %p \n", *array, array[0]);

        printf("[0][0] 对应的值:              **array = %d, *array[0] = %d \n", **array, *array[0]);

        printf("\n");

        

        printf("test:                          *array = %d, &array[0] = %d \n", array, &array[0]);

        printf("test   :                          dp1 = %d,        dp = %d \n", dp1, dp);

        

        int i = 0, j = 0;

        for(i=0;i<3;i++){

            for(j=0;j<2;j++){

                printf("address array = %p \n", &array[i][j]);

            }

        }

        printf("\n");

        for(i=0;i<3;i++){

            for(j=0;j<2;j++){

                printf("value array = %d, \n", array[i][j]);

            }

        }

        

        printf("\n");

        print_double_point_address_value_p(dp,dp1);

        }

        每日一道理
    毅力,是千里大堤一沙一石的凝聚,一点点地累积,才有前不见头后不见尾的壮丽;毅力,是春蚕吐丝一缕一缕的环绕,一丝丝地坚持,才有破茧而出重见光明的辉煌; 毅力,是远航的船的帆,有了帆,船才可以到达成功的彼岸。

        extern void print_double_point_address_value_p(int **p,  int *p1){//两种拜访方法

        int i = 0, j = 0;

        for(i=0;i<3;i++){

            for(j=0;j<2;j++){

                printf("p = %p, p1 = %p, \n", (*p+i*2)+j, (p1+i*2+j));

            }

        }

        printf("\n");

        

        //int[][]分配在连续空间里,所以可用一个for循环,遍历全部元素

        int* temp = p1;

        for(i=0;i<6;i++){

                printf("p = %d,  \n", *temp++);

            //    printf("p = %d,  \n", *(temp++));// 和*temp++ 表现的一样,是指针的挪动

            //    printf("p = %d,  \n", (*temp)++);//temp指向的值自增

        }

        }

        编译这个程序,有两处warning,

        main.c: In function ‘main’:
    main.c:21: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int (*)[2]’
    main.c:21: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int (*)[2]’
    main.c:22: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
    main.c:22: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int **’

        由正告可知,array 和&array[0]  是int(*)[2] 型的指针  和int** 型的指针直接确定不能赋值,所以

         //int **dp = array; //int **dp = &array[0];  这两种写法都是不对的,

        如果有上面的两种赋值,编译时,指针匹配,不会出错 ,运行时,有时候会出现段错误。

        

        

        

    文章结束给大家分享下程序员的一些笑话语录: 火车
    一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现 列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面是一个老奶 奶和一个年轻漂亮的姑娘。两个上前坐了下来。程序员和那个姑娘他们比较 暧昧地相互看对方。这时,火车进入山洞,车厢里一片漆黑。此时,只听见 一个亲嘴的声音,随后就听到一个响亮的巴掌声。很快火车出了山洞,他们 四个人都不说话。
    那个老奶奶在喃喃道, “这个年轻小伙怎么这么无礼, 不过我很高兴我的孙女 扇了一个巴掌”。
    项目经理在想,“没想到这个程序员居然这么大胆,敢去亲那姑娘,只可惜那 姑娘打错了人,居然给打了我。”
    漂亮的姑娘想,“他亲了我真好,希望我的祖母没有打疼他”。
    程序员坐在那里露出了笑容, “生活真好啊。 这一辈子能有几次机会可以在亲 一个美女的同时打项目经理一巴掌啊”

    --------------------------------- 原创文章 By
    指针和二维
    ---------------------------------

  • 相关阅读:
    (原创)系统架构设计-通用权限模型设计①
    (原创)项目部署-Tomcat设置默认访问项目及项目重复加载问题处理
    安装在CloudStack时CentOS6.4中安装MySQL通过mysql_secure_installation方式修改密码
    (原创)VM中的CentOS6.4中安装CloudStack6.3②
    (原创)VM中的CentOS6.4中安装CloudStack6.3①
    S2SH+mysql-软件开发实际部署问题-8个小时后提示MYSQL数据库无法连接
    转---B/S结构JavaEE WebApp的全自动安装包制作心得
    javaEE-----org.springframework.dao.InvalidDataAccessApiUsageException: Write operation
    监控服务器Java异常脚本
    StringUtils.isNumeric("")竟然返回true
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3106815.html
Copyright © 2020-2023  润新知