我只是想询问如何将数组的地址传递给函数。
void me( int *a ) {
printf("%d\n", *a); // that gives me 11
}
int main () {
int x[3] = { 11, 12, 13 };
me(&x[0]);
return 0;
}
但是,如果我想通过重复我(& x [//我希望传递的位置)来传递整个数组怎么办;
有可能吗?
答案 0 :(得分:4)
所有其他答案都很好,只有一件事要补充,构成我的观点。
你应该为你的函数添加一个参数,以便能够将它与不同长度的不同数组一起使用,所以将数组的长度传递给me
函数
#include <stdio.h>
void me( int *a, size_t length ) {
size_t i;
for (i=0; i<length; i++)
printf("Element %zu is %d\n", i, a[i]);
}
int main () {
int x[3] = { 11, 12, 13 };
me(x, sizeof(x)/sizeof(x[0]));
return 0;
}
如您所见,我使用sizeof返回数组的字节长度。因此将其除以数组中单个元素的字节大小。结果是数组的元素数量。
答案 1 :(得分:3)
但是 将“整个数组”传递给函数。通过将指针传递给第一个元素,您实际上也将指针传递给其余元素。
要打印出数组的第二个元素,请修改如下函数:
void me( int *a ) {
printf("%d\n", a[1]); // prints the second element in a
}
这是有效的,因为对于任何数组或指针 a
和索引i
,表达式a[i]
与*(a + i)
相同。
另请注意,简单地传递x
与传递&x[0]
相同,因为数组会自然地衰减到指向其第一个元素的指针。所以电话可能只是
me(x); // Same as me(&x[0])
答案 2 :(得分:3)
数组的地址与第一个元素的地址相同。要打印其余元素,只需按下面增加指针。
#include <stdio.h>
void me( int *a ) {
printf("%d\n", *a); // that gives me 11
printf("%d\n", *(a+1)); // will give you 12
printf("%d\n", *(a+2)); // will give you 13
}
int main () {
int x[3] = { 11, 12, 13 };
me(&x[0]);
return 0;
}
答案 3 :(得分:1)
当你将数组名传递给一个函数时,它会自动传递数组的第一个元素的地址。所以我们也可以循环地址并访问其他元素。你可以试试这个。
#include<stdio.h>
void me( int *a) {
int i;
for(i=0;i<3;i++){
printf("%d\n",*(a+i));
}
}
int main () {
int x[3] = { 11, 12, 13 };
me(x);
return 0;
}
输出
11
12
13
答案 4 :(得分:0)
是的,您可以将整个数组传递给函数。所以,
me(x); //Pass only name of array
数组保持元素的起始地址意味着x[0]
地址。
#include<stdio.h>
void me( int *a) {
int i=0;
while (i<3)
{
printf("%d\n",*(a+i));
i++;
}
}
int main () {
int x[3] = { 11, 12, 13 };
me(x);
return 0;
}