为了账号安全,请及时绑定邮箱和手机立即绑定

求问一下,在VC++中int[2]和int*有什么区别?为什么不允许通用?

求问一下,在VC++中int[2]和int*有什么区别?为什么不允许通用?

守候你守候我 2021-02-16 14:10:07
int*就是指明int数组的地址不是么,声明的时候用int*var或者int var[2] (注:也可能是其他值),后来赋值用int var[0]=1;int var[1]=1都可以赋值。但是编写方法的话,两者作为参数的话..就不通用了..它会报错告诉你 int* 和 int[2]不是一个类型不能通用,这两者有什么区别么?为什么不能通用?万一想在函数参数里声明一个长度并不确定的数组该咋办?同时...声明一个常数不确定的数组除了使用int*之外还有别的方法么?
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

【int*就是指明int数组的地址不是么】

不是。int * 和 int []是完全不同的概念。
int * a; // 声明一个指针变量,变量名是a,在32位机器下,指针变量是一个32位数字。该数字具体的值是内存地址。当然,这是指针的一般用法。实际上指针变量就是一个32位数字,他当然可以表示任意一个32位数字,不必一定要是某个变量的内存地址。
int a[20]; // 声明一个数组,数组名是a,数组可以存20个int变量。根据C语言里面的规定,数组名同时可表示数组的首地址,所以a也可以是一个地址,这个地址就是该数组的首地址,同时也是第一个元素的地址即a[0]的内存地址。a[0]的内存地址,跟a[0]具体等于多少,没有明面的直接关系。

一般而言:
int a[20]; // 声明一个数组,并分配空间
int *a; // 声明一个指针变量,只分配存储该指针变量的空间,即32位数的空间。
int *a = new int[20]; // 声明一个指针变量,分配存储该指针变量的空间,同时声明并定义一个int数组,分配空间为20 * sizeof(int),并且,将分配的这个空间的内存地址的值,赋值给指针变量a。

查看完整回答
反对 回复 2021-03-22
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

int* 是int的地址,不是数组的地址

查看完整回答
反对 回复 2021-03-22
  • 2 回答
  • 0 关注
  • 509 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信