java - c/c++ 指针指向 数组和数据类型 判断时会不会有二义性?
问题描述
int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2这里1说明a是int 类型的指针,2说明c是int数组类型的指针.对不?这段数据结构代码

两个理解:1.rowlist是个动态数组指向一大块内存,数组里的元素存储着指向LinkList<int>链表的地址。即rowlist是指针数组。如图一
2.rowlist指向一个内存,这个内存存储着<LinkList< int > * >类型的指针,即rowlist是指针的指针。如图二

感觉两个都可以,是要看具体实现吗。比如rowlist=new ...是采用第一种?
问题解答
回答1:int dd=1;int *a=ⅆ // 1int *c=new int[2]; //2
题主说:
这里1说明a是int 类型的指针,2说明c是int数组类型的指针.对不?
并不是这样的,a和c其实是同一个东西,他们是指向int的指针。c并不是“int数组类型的指针”。
为什么c本来是一个int指针,但实际上它却可以指向一个int数组呢?因为int数组赋值给int指针的时候,C语言偷偷把它(int数组)转换成了该int数组的首元素,这个“偷偷转换”的专业名词叫“隐式转换”。
所以总结一下:
变量c不是int数组类型的指针,而是int类型的指针;
那为什么变量c竟然可以指向int数组呢,是因为其中发生了隐式转换;
回答2:int *c=new int[2]; //2
c就是指向int的指针。指向数组的指针应该写成
int (*c)[2]=new int[2];
指针+1 会走几个字节呢?试一试。
相关文章:
1. javascript - 给某个类添加一个伪类,这个类有click事件,现在我点击伪类也触发了click事件2. docker绑定了nginx端口 外部访问不到3. docker images显示的镜像过多,狗眼被亮瞎了,怎么办?4. docker gitlab 如何git clone?5. 小白学python的问题 关于%d和%s的区别6. angular.js - 怎样实现点击 “分数” 后按分数升序和降序排列?7. javascript - 这是什么数组?8. css - 如何更改 iOS 和安卓浏览器上的 input[type="radio"] 元素的默认样式?9. python - 学习模拟登录,卡在发送POST请求之后?10. javascript - 怎样去除数组里的几个值,只提供该数组的下标的话

网公网安备