我对此代码有疑问,为什么我在readMat()中给出的值实际上存储在a和b ??
中我的意思是不是按值而不是通过引用进行此调用?
哦,如果还有其他事我做错了请告诉我。我会很感激。
提前完成。
#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 matrix\n");
scanf("%d",&x[0].rowNo);
printf("\nEnter the number of columns in the sparse matrix\n");
scanf("%d",&x[0].colNo);
printf("\nEnter the number of non-zero elements in the sparse matrix\n");
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 %d\n",i);
scanf("%d",&x[i].rowNo);
printf("\nEnter the column number of element number %d\n",i);
scanf("%d",&x[i].colNo);
printf("\nEnter the value of the element number %d\n",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("%d\t",x[k].value);
k++;
}
else
printf("%d\t",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);
}
答案 0 :(得分:4)
从技术上讲,C仅支持按值调用。当数组作为函数参数传递时,它们会“衰减”为指针。当你传递指针时,你仍然按值传递它,即指针的值,但你可以修改指针指向的位置。
你可以认为它在传递指针时就像引用一样调用,但需要了解真正发生的事情。
答案 1 :(得分:2)
是的,它是按参考号召集的。在C中,通过传递第一个元素的地址将数组传递给函数,就像您将函数声明为:
void readMat(struct spMat *x);
答案 2 :(得分:0)
“当数组作为函数参数传递时,它们会”衰减“为指针”
小前夫:
void f(int b[])
{
b++;
*b = 5;
}
int main()
{
int arr[] = {1,2,3,4};
f(arr);
printf("%d",arr[1]);
return 0;
}