通过c数组中的引用传递

时间:2014-12-16 05:47:59

标签: c arrays

您好,我想问一下为什么我需要使用printf(" \ n%d",x);而不是printf(" \ n%d",* x);? 非常感谢你

#include<stdio.h>
#include<stdlib.h>
#define totalnum 8
void display(int **);
int main()
{
    int marks[totalnum]={55,65,75,85,90,78,95,60};
    printf("The marks of student A are:");  
    display(marks);
    return 0;
}
void display(int *x)
{
    int i;
    for(i=0;i<totalnum;i++)
    printf("\n%d",x);
}

2 个答案:

答案 0 :(得分:2)

C中没有通过引用传递。数组衰减到显示函数中的指针,你错误地声明为int **而不是int * - 编译器应该至少给你一个警告这样:

http://ideone.com/R3skNj

这就是display函数应该是这样的:

void display(int *x) 
{
    int i;
    for(i = 0; i < totalnum; i++) {
        printf("\n%d",*(x+i)); // or printf("\n%d",x[i]);
    }
}

答案 1 :(得分:0)

我认为您正在寻找类似的东西:

#include <stdio.h>
#include <stdlib.h>

#define totalnum 8

void display(int *);  //Typ is 'int *' NOT 'int **'
int main() {

    int marks[totalnum] = {55,65,75,85,90,78,95,60};

    printf("The marks of student A are:");
    display(marks);

    return 0;

}

void display(int *x) {
    int i;
    for(i = 0; i < totalnum; i++) {
        printf("\n%d",*x);  //Prints the value
        x++;  //increments the pointer
    }
}