Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
604 views
in Technique[技术] by (71.8m points)

c/c++ 指针指向 数组和数据类型 判断时会不会有二义性?

int dd=1;
int *a=ⅆ    // 1
int *c=new int[2];  //2

这里1说明a是int 类型的指针,2说明c是int数组类型的指针.对不?

这段数据结构代码

图片描述

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

2.rowlist指向一个内存,这个内存存储着<LinkList< int > * >类型的指针,即rowlist是指针的指针。如图二

图片描述

感觉两个都可以,是要看具体实现吗。比如rowlist=new ...是采用第一种?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
int dd=1;
int *a=&dd;    // 1
int *c=new int[2];  //2

题主说:

这里1说明a是int 类型的指针,2说明c是int数组类型的指针.对不?

并不是这样的,a和c其实是同一个东西,他们是指向int的指针。c并不是“int数组类型的指针”。

为什么c本来是一个int指针,但实际上它却可以指向一个int数组呢?因为int数组赋值给int指针的时候,C语言偷偷把它(int数组)转换成了该int数组的首元素,这个“偷偷转换”的专业名词叫“隐式转换”。

所以总结一下:

  1. 变量c不是int数组类型的指针,而是int类型的指针;

  2. 那为什么变量c竟然可以指向int数组呢,是因为其中发生了隐式转换;


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...