指针数组做实参
给位大佬,麻烦问一下这道题为什么要用指针数组做形参啊?指针数组不中应该每一个元素都是个指针指向一些数据,这里每一个指针指针一个数据。http://p2.so.qhmsg.com/t022e154cec27c12cfe.jpg 传的是地址不是值,使用数组也是一样 我给你回消息了。不是看到array就是数组的。这里函数模板中的形参array是一个指向T类对象的指针而已。调用的时候传入的就是一个指向T类对象数组的首地址。 本帖最后由 4goodworld 于 2020-3-2 22:15 编辑
int a[]和 int* a
这两个a性质上啥区别?{:10_256:}
int main() {
int a = { 1,2,3,4 };
int* b;
b = a;
for (int i = 0; i < 4; i++) {
printf("%2d", *(b + i));
}
return 0;
}
4goodworld 发表于 2020-3-2 22:12
int a[]和 int* a
这两个a性质上啥区别?
一个数组一个指针 冷回清风暖 发表于 2020-3-3 20:30
一个数组一个指针
请原谅我的措辞不当,但我想表达的意图是想说明 在某些用法上没有啥区别 4goodworld 发表于 2020-3-2 22:12
int a[]和 int* a
这两个a性质上啥区别?
大哥,麻烦问一下这个*(b+i)是想干啥呀?就是访问a吗? major_lyu 发表于 2020-3-2 22:11
我给你回消息了。
不是看到array就是数组的。这里函数模板中的形参array是一个指向T类对象的指针而已。调 ...
大佬,你说的我懂了,那为什么array是个值,那array又变成数组了 松鼠呀 发表于 2020-3-3 23:47
大哥,麻烦问一下这个*(b+i)是想干啥呀?就是访问a吗?
就是相当于a 本帖最后由 major_lyu 于 2020-3-4 01:00 编辑
松鼠呀 发表于 2020-3-3 23:47
大佬,你说的我懂了,那为什么array是个值,那array又变成数组了
array是个指向T对象的指针,也就是说array这个变量值存储的是一个T对象的地址。
之前好像给你解释过,数组名就是数组的首地址,也就是数组第一个元素的地址。那你觉得一个存储T类对象的数组的首地址和指向T类对象的地址是不是都是表示一个T类对象存储的内存单元的地址。
例如int a={0,1,2,3}, a既是数组名,也是数组第一个元素的地址,所以a可以看做是一个指向int的指针。
所以你可以这样写:int *p=a; 这时p和a表示的都是数组a的首地址, 数组可以用a来表示也可以用p来表示。
数组名作为实参传递给函数时,实际上传递的就是数组的首地址而已,函数本身并不知道你传进来的是个数组,他只知道接下来的操作是从这个地址开始向后的某些地址空间,并且地址空间时以你定义的指针类型所指示数据类型所占据的内存空间为最小单位进行访问的。因此,你传进去一个数组名和传进去一个指针对函数来说是一样对待的。
页:
[1]