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

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

守候你守候我
浏览 510回答 2
2回答

互换的青春

【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。

慕工程0101907

int* 是int的地址,不是数组的地址
打开App,查看更多内容
随时随地看视频慕课网APP