c代码中的混乱



我在这段代码中有一个疑问,为什么我在readMat()中给出的值实际上存储在a和b中??

我的意思是,这个调用不是通过值而不是通过引用吗?

哦,如果我做错了什么,请告诉我。我会很感激的。

提前Thanx。

#include<stdio.h>
struct spMat
{
    int rowNo;
    int colNo;
    int value;
}a[20],b[20],c[20],d[20],e[20];
void readMat(struct spMat x[20])
{
    printf("Enter the number of rows in the sparse matrixn");
    scanf("%d",&x[0].rowNo);
    printf("nEnter the number of columns in the sparse matrixn");
    scanf("%d",&x[0].colNo);
    printf("nEnter the number of non-zero elements in the sparse matrixn");
    scanf("%d",&x[0].value);
    int r=x[0].rowNo;
    int c=x[0].colNo;
    int nz=x[0].value;
    int i=1;
    while(i<=nz)
    {
        printf("nEnter the row number of element number %dn",i);
        scanf("%d",&x[i].rowNo);
        printf("nEnter the column number of element number %dn",i);
        scanf("%d",&x[i].colNo);
        printf("nEnter the value of the element number %dn",i);
        scanf("%d",&x[i].value);
        i++;
    }
}
void printMat(struct spMat x[20])
{
    int k=1,i,j;
    for(i=0;i<x[0].rowNo;i++)
    {
        for(j=0;j<x[0].colNo;j++)
        {
            if((k<=x[0].value)&&(x[k].rowNo==i)&&(x[k].colNo==j))
            {
                printf("%dt",x[k].value);
                k++;
            }
            else
                printf("%dt",0);
        }
        printf("n");
    }
}
void fastTranspose(struct spMat x[20])
{
}
void addMat(struct spMat x[20], struct spMat y[20])
{
}
void multMat(struct spMat x[20], struct spMat y[20])
{
}
void main()
{
    readMat(a);
    readMat(b);
    printMat(a);
    printMat(b);
}

从技术上讲,C只支持按值调用。当数组作为函数参数传递时,它们会"衰减"为指针。当你传递指针时,你仍然在按值传递,即指针的值,但你可以修改指针指向的内容。

在传递指针时,您可以将其视为引用调用,但需要了解实际发生了什么。

是的,它是通过引用调用的。在C中,数组是通过传递第一个元素的地址来传递给函数的,就像您将函数声明为:一样

void readMat(struct spMat *x);

"当数组作为函数参数传递时,它们会"衰减"为指针"

小型,例如:

void f(int b[])
{
  b++;
  *b = 5;
}
int main()
{
  int arr[] = {1,2,3,4};
  f(arr);
  printf("%d",arr[1]);
  return 0;   
}            

相关内容

  • 没有找到相关文章

最新更新