| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3529 人关注过本帖
标题:定义二维数组a[5][6],那么a和a[0]的数值一样,但类型不一样 ,这句话什么意 ...
只看楼主 加入收藏
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
嘿嘿,楼主,想必你也知道区别是类型不一样了,但是你知道这有什么意义吗?类型不一样怎么了?


莫问前尘有愧,但求今生无悔
2015-08-12 11:54
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
俺真是有点蒙了,指向的含义不同,但毕竟都是存放地址呀,为啥说“类型”不同?

[ 本帖最后由 ditg 于 2015-8-12 17:04 编辑 ]

梦想拥有一台龙芯3A-4000
2015-08-12 17:02
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
回复 12楼 ditg
兄台,试试 a + 1 和 a[0] + 1


莫问前尘有愧,但求今生无悔
2015-08-12 19:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
數組和指針根本是兩回事,那個等同說法害了無數人。在某種情況下蛻化成指針,但不是說數組等同指針,這一等同,就錯了。

授人以渔,不授人以鱼。
2015-08-12 19:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用ditg在2015-8-12 17:02:45的发言:

俺真是有点蒙了,指向的含义不同,但毕竟都是存放地址呀,为啥说“类型”不同?


char* p1;
int* p2;

這裡p1和p2都是指針,卻是不一樣的,+1、-1就知道,行為不一樣。如果指針都是一樣,那麼就不需要前面的類型符。void*可以轉化為任何別的類型指針,祗是編譯器行為,不是運行時可行。亂轉類型,在《C陷阱與缺陷》中已經指明,在C++中,更是嚴厲警告不要自以為是總用C這種可行的手段(僅以兼容性允許)。

授人以渔,不授人以鱼。
2015-08-12 19:56
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
回13楼:

您说这个我还没太理解想说明啥。虽然极端点,但我想表达的如下:

#include <stdio.h>
int main(int argc, char *argv[])
{
    const int matrix[][5] =
    {
            { 1,   4,  7, 11, 15 },
            { 2,   5,  8, 12, 19 },
            { 3,   6,  9, 16, 22 },
            { 10, 13, 14, 17, 24 },
            { 18, 21, 23, 26, 30 }
        };
    printf("%d\n", **matrix);
    printf("%d\n", *matrix[0]);
    printf("%d\n", matrix[0][0]);
    return 0;
}

梦想拥有一台龙芯3A-4000
2015-08-12 20:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
指针绝对不是一个记录地址值的变量那么简单。比如char* p1、int* p2这样两个指针,编译器在哪里记录指针所指向的类型从而采用不同行为呢?《C++ Primer》中对指针的定义,是一个“对象”,从来没说指针是仅记录地址的。

授人以渔,不授人以鱼。
2015-08-12 21:12
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
回版主:

俺也没说指针简单,楼主问二维数组里的事儿,跟其它没啥关系呀,hehe

梦想拥有一台龙芯3A-4000
2015-08-12 21:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你看清楚楼主问什么和前面的对答。其实他的问题跟你是一样的,嘿嘿。

[ 本帖最后由 TonyDeng 于 2015-8-12 21:42 编辑 ]

授人以渔,不授人以鱼。
2015-08-12 21:34
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
看清了呀,楼主说这俩数值一样,就是说printf("%p\n", matrix); printf("%p\n", matrix[0]);一样,但类型不一样,问类型哪里不一样了?俺认为也就具体操作时的含义不同,但类型是一样的呀,就像13楼让我试的一样,printf("%d\n", *(matrix[0] + 1));printf("%d\n", **(matrix + 1));

梦想拥有一台龙芯3A-4000
2015-08-12 21:42
快速回复:定义二维数组a[5][6],那么a和a[0]的数值一样,但类型不一样 ,这句话什 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012625 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved