关于c语言的困惑

来源:百度知道 编辑:UC知道 时间:2024/06/02 22:58:04
定义一个数组 int *p,a[3][4]
a[0],a[1]...........代表的什么 本质是什么
a有代表的什么 本质是什么
a和a[0]a,[1]之间又有什么差别?
另外p=a为什么不合法?

p是一个指向int型空间的指针变量,存放的是这个int型空间的地址(一般为16位)
*p是这个int空间里面存放的值

a[3][4]是一个二维数组 是静态定义的数组 **a可以动态申请为二维数组。
a本质是一个指向 指针类型空间的指针变量,a里面存放的是 这个指针类型空间的地址,这个指针类型空间(*a)里面的值是存放int类型空间的地址。
这里的a的类型是int** p的类型为int*类型的 a[1]的类型是int*,a[1][1]的类型是int

a[3][4]是一个3行4列的数组

1.a[0],a[1]代表的是a[0][0]这一行的(首)地址
它们都是指针类型的(int*类型)

2.a代表指向整个数组的指针,它是一个指针的指针,即int**型的

3.明白了上面的两点,相信你也能找出a,a[0],a[1]之间的区别了吧

4.这个应该也不是问题了,p是int*型的,a是int**型的,当然不合法了

int *p,a[3][4]
这是定义了一个名字叫p的指针和一个名叫a的二维数组。a有4行5列(数组的下标是从0开始的)
p=a不合法,这就是数据类型不配的关系。有引用数据类型和值类型两种。
你该好好翻翻书,C语言好久没用过都忘了指针加*号是值还是引用了。

建议复习一下二维数组和指针
另外 p=a 是合法的
因为:
p指向int型
a[3][4]是int型2维数组,这里的a相当于一个地址即a[0]或a[0][0]的地址
p是指针,a在这里又相当于地址,所以是合法的

前面的问题我就不回答了 呵呵