C 语言中的数组类型和数组指针类型.

原创 2004年07月17日 14:15:00

#include <iostream>
using namespace std;

int main()
{
    //等长的二维数组:
    int aInt2dArrayOnStack[2][8];
    int* pIntArray = aInt2dArrayOnStack[0];//int * == int [];
    int (*pInt2dArray)[8] = aInt2dArrayOnStack; // int (*)[8] == int [][8]

    //有了上面的经验,以下部分就可以理解了.
    int (*pInt2d)[8] = new int[2][8];
    int* pInt = *pInt2d; // *pInt2d = int[8]
    int aInt = **pInt2d; // **pInt2d = int[0][0]

    //以下就当练习了
    cout << sizeof(aInt2dArrayOnStack) << endl;
    cout << sizeof(pInt2d) << endl;
    cout << sizeof(*pInt2d) << endl;
    cout << sizeof(pInt2d[0]) << endl;
    cout << sizeof(**pInt2d) << endl;

    return 0;
}

/*
这里的关键大概是类型吧:
谁知道以下类型有什么区别吗?
int
int *
int []
int (*)[]
int *[]
int **
int [][]

指针类型有:
int *
int []
int (*)[]
int **

其长度都为4, 可以自动转换的是int * 和int [].
因为数组具有指针的本质.

可以强制转换的是int* <=> int (*)[]和int [] <=> int (*)[]
因为二维数组本质上是一维的.

int **是指针的指针, 它与上面的类型完全不相等.


数组类型有:
int []
int *[]
int [][]

都是数组,长度与它的元素数有关.假设类型为:
int [N]
int *[N]
int [N][N]

那么int [N]和int *[N]的长度为 4*N以外, 它们都是一维数组,前者是一维int数组,后者是一维int*的数组.
而int [N][N] 为 N*N*4, 它是二维数组.

指向二维数组的指针如何定义呢?
是int (*)[N][N] 还是int (*)[N];

也是个练习吧.
*/

C语言--指针和一维数组

#include //指针运算 int main(int argc, const char *argv[]) { short a = 10; short *p = &a; printf("&...
  • u011266694
  • u011266694
  • 2016年10月29日 14:47
  • 188

C语言数组、指针强制类型转换

今天在写到代码的时候,因为要将数据写入到flash中去,这块flash规定每次写入两个字节,然后发现了一个挺好玩的事情,那就是类型强制转换。 通过测试发现char类型强制转换成short或者int类...
  • fyblablabla
  • fyblablabla
  • 2017年04月29日 21:04
  • 1271

关于C语言中的数组指针、指针数组以及二级指针

概念解释数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素,而不是整个数组,所以...
  • u014265347
  • u014265347
  • 2017年02月05日 19:14
  • 2563

C语言一维数组的定义

一维数组的定义方式    在C语言中使用数组必须先进行定义。一维数组的定义方式为:   类型说明符 数组名 [常量表达式];   其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户...
  • kw979wk
  • kw979wk
  • 2016年11月03日 22:21
  • 411

c语言中 printf的打印类型

转换说明及作为结果的打印输出%a 浮点数、十六进制数字和p-记数法(C99) %A 浮点数、十六进制数字和p-记法(C99) %c 一个字符 %d 有符号十进制整数 %e ...
  • wujiangguizhen
  • wujiangguizhen
  • 2014年07月01日 18:20
  • 2246

数组中&a与&a[0]的区别

在探讨这个问题之前,我们首先来看一道笔试题,如下:   【摘自牛客网】下列代码的结果是:(正确答案是 C)main() { int a[5]={1,2,3,4,5}; int ...
  • FX677588
  • FX677588
  • 2017年07月09日 10:34
  • 430

C语言:数组和指针的区别

实际上关于数组与指针的区别这个问题在《C专家编程》已经有很详细的阐释,但我想用自己的语言说一说我的理解。数组是指针?最近在做数据结构课设,其中一个函数发生了令人费解的错误,简化后的代码如下:#incl...
  • imred
  • imred
  • 2015年05月02日 19:08
  • 13309

c语言中的字符数组和字符串之间的关系

一、字符串的结束标志'\0' 1、很多时候我们都是可以看到相关的内容就是: 使用数组来存储字符串,也就是我们经常会使用到sizeof()和这个函数,而,这个函数只是求出当前该数组的最大容量,而不是数组...
  • u012496940
  • u012496940
  • 2015年10月22日 18:13
  • 2853

c语言-数据类型-构造类型

利用计算机存处理单一的数据是比较容易,比如一个人的某一科成绩,直接创建一个变量存储相应的分数就可以了,但是要同时处理多个科目的时候,这时候就有点麻烦了,同时创建多个变量存储多个科目这样子显得有点奇怪不...
  • OnionOmelette
  • OnionOmelette
  • 2015年02月04日 18:47
  • 3501

C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型

 数组专题 1、数组初始化: 数组元素的个数可以显示或隐式指定 int main() { int a[10] = {1,2};//其...
  • wu5215080
  • wu5215080
  • 2014年09月01日 23:26
  • 2323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C 语言中的数组类型和数组指针类型.
举报原因:
原因补充:

(最多只允许输入30个字)