C 如何将数组的地址传递给函数?
我只是想问一下如何将数组的地址传递给函数C 如何将数组的地址传递给函数?,c,arrays,pointers,C,Arrays,Pointers,我只是想问一下如何将数组的地址传递给函数 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; } 但是如果我不想通过重复me(&x[//我想通过的位置)来通过整个数组,该怎么办 可能吗?但是您正在将“整个数组”传递给函数。通过传递指向第一个元素的指针,实际上也在
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;
}
但是如果我不想通过重复me(&x[//我想通过的位置)来通过整个数组,该怎么办
可能吗?但是您正在将“整个数组”传递给函数。通过传递指向第一个元素的指针,实际上也在传递指向其余元素的指针
要打印出数组的第二个元素,请修改如下函数:
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])
数组的地址与第一个元素的地址相同。要打印其余元素,只需按如下所示递增指针
#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;
}
#包括
使我无效(int*a){
printf(“%d\n”,*a);//这给了我11
printf(“%d\n”,*(a+1));//将给您12
printf(“%d\n”,*(a+2));//将给您13
}
int main(){
int x[3]={11,12,13};
me(&x[0]);
返回0;
}
是的,您可以将整个数组传递给函数。所以
me(x); //Pass only name of array
数组保存元素的起始地址意味着x[0]
address
#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;
}
#包括
使我无效(int*a){
int i=0;
而(i当您将数组名传递给函数时,它将自动传递数组第一个元素的地址。因此,我们可以循环该地址并访问其他元素。您可以尝试此操作
#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;
}
所有其他答案都很好,只是需要补充一点,从我的观点来看
您应该向函数中添加一个参数,以便能够在不同长度的数组中使用它,因此将数组的长度传递给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;
}
#包括
无效me(整数*a,大小\u t长度){
尺寸i;
对于(i=0;iYes,这是可能的。您尝试过吗?传递&x
,或者甚至传递x
都会导致隐式转换(“衰减”)指向指针。因此,它与向第一个元素传递指针没有什么区别。如果函数可以传递不同的数组,或者每个数组的大小不固定,则也应该传递大小,以便函数知道它可以从第一个元素索引多远。&x[0]相当于x。它是相同的,数组中第一个元素的地址。但是这里你只使用一个元素,所以你不需要处理数组。你能根据我的问题给我一个例子吗only@underscore_dx
(或&x[0]
)与&x
不同。第一个是指向int
的指针,另一个是指向int[3]
的指针,差别很大。地址相同,但类型不同。要明确说明这一点:在C中不可能“传递数组”。只需执行me(x)即可传递其第一个元素的地址
(其中数组x
衰减其第一个元素的地址)或通过执行me(&x)传递数组的地址
。只有在函数内部更改x
的值时,才需要后者,这对于OP的代码是不可能的,因为x
是一个数组变量。但它给我一个警告,即从不兼容的指针类型传递“me”的arg 1。@DisplayName是否确定?您的编译器是什么?@DisplayName代码,如y所示你展示了它,不应该引起这样的警告。
#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;
}