C语言 指针 求大佬帮忙看看哪里出问题了

//Given are two N-维度矢量 =(A1,A2,A3,…,AN)和B=(B1,B2,B3,…,BN)
//Determine whether the inner product of A and B is 0.
//In other words, determine whetherA1B1+A2B2+A3B3+...+ANBN=0.

#include<stdio.h> 
int Det(int *x,int *y,int *n)
{
	int i,sum;  
	int *p;
	for(i=0;i<*n;i++)
	{
		*p=(x[i])*(y[i]);
		p++;
		sum+=(*p);
	}
	return sum;
}

int main()
{
	int i,n,sum;
	scanf("%d",&n);
	
	int a[100],b[100];
	for(i=0;i<n;i++)
		scanf(" %d",&a[i]);
	for(i=0;i<n;i++)
		scanf( "%d",&b[i]);
		
	sum=Det(a,b,n);
	
	if(sum==0)
		printf("No\n");
	if(sum!=0)
	{
		printf("Yes\n");
		printf("The inner product of A and B is");
		for(i=0;i<n;i++)
			printf("%d*%d+",a[i],b[i]);
		printf("=%d",sum);
	}
	return 0;
}

 

sum=Det(a,b,&n);

函数要求第三个参数是指针类型

把函数参数n改为int类型,删除函数内部的p相关的代码,直接用sum接收累加值,就行了

代码修改如下,如有帮助,请采纳一下,谢谢。

//Given are two N-维度矢量 =(A1,A2,A3,…,AN)和B=(B1,B2,B3,…,BN)
//Determine whether the inner product of A and B is 0.
//In other words, determine whetherA1B1+A2B2+A3B3+...+ANBN=0.
#include<stdio.h> 
#include <string>
int Det(int *x,int *y,int n)
{
	int i,sum;  
	int *p = new int[n];
	memset(p,0,n);
	for(i=0;i<n;i++)
	{
		*p=(x[i])*(y[i]);
		p++;
		sum+=(*p);
	}
	delete[] p;
	p = 0;
	return sum;
}
int main()
{
	int i,n,sum;
	scanf("%d",&n);

	int a[100],b[100];
	for(i=0;i<n;i++)
		scanf(" %d",&a[i]);
	for(i=0;i<n;i++)
		scanf( "%d",&b[i]);

	sum=Det(a,b,n);

	if(sum==0)
		printf("No\n");
	if(sum!=0)
	{
		printf("Yes\n");
		printf("The inner product of A and B is");
		for(i=0;i<n;i++)
			printf("%d*%d+",a[i],b[i]);
		printf("=%d",sum);
	}
	return 0;
}

把n的形参和实参的类型统一了,在初始化下sum,然后再删了p++,应该就行了。