| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 647 人关注过本帖
标题:求助!调用数组时数组值发生变化
只看楼主 加入收藏
xiaozz
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-27
收藏
 问题点数:0 回复次数:6 
求助!调用数组时数组值发生变化
#include<stdio.h>
#include<math.h>
int main()
{
int a[5]={1,2,3,4,5},b[6]={1,2,3,4,5,6};
int c[9],*p;
p=c;
void xcorr(int a[],int la,int b[],int lb,int l,int *p);
xcorr(a,5,b,6,6,p);
for(int i=0;i<13;i++)
printf("%d ",c[i]);
return 0;
}

void xcorr(int a[],int la,int b[],int lb,int l,int *p)//求互相关,la,lb为数组a,b的长度
{int max(int a,int b);
 int min(int a,int b);
 int i,j;
 for(i=-1*l;i<=l;i++)
 {
    *(p+i+l)=0;
    if(max(0,i)<min(la,i+lb))
        for(j=max(0,i);j<min(la,i+lb);j++)//使数组内各值存在
        {*(p+i+l)+=a[j]*b[j-i];//求互相关公式
        printf("%d %d ",j-i,b[j-i]);}//为显示数值发生变化
    printf("\n");
 }
}

 int max(int a,int b)
 {int c;
 c=(a>b)?a:b;
 return c;
 }


  int min(int a,int b)
 {int c;
 c=(a<b)?a:b;
 return c;
 }
运行后数组b的值发生变化,请高手指导
搜索更多相关主题的帖子: include return 
2013-08-27 21:35
shenxiaoke05
Rank: 2
等 级:论坛游民
帖 子:14
专家分:19
注 册:2013-8-17
收藏
得分:0 
void xcorr(int a[],int la,int b[],int lb,int l,int *p)要实现什么功能?能说一下吗?
int main()
 {
 int a[5]={1,2,3,4,5},b[6]={1,2,3,4,5,6};
 int c[9],*p;
 p=c;
 void xcorr(int a[],int la,int b[],int lb,int l,int *p);   //这句应该删除,函数定义不应该在主函数里
 xcorr(a,5,b,6,6,p);
 for(int i=0;i<13;i++)     //这里的i<13是为什么? c[]数组的长度不是9吗?为什么越界?
 printf("%d ",c[i]);
 return 0;
 }

 void xcorr(int a[],int la,int b[],int lb,int l,int *p)//求互相关,la,lb为数组a,b的长度
{int max(int a,int b);  
 int min(int a,int b); //max和min的函数写到这里什么意思?感觉莫名其妙
 int i,j;
 for(i=-1*l;i<=l;i++)   //这里 i的初始值等于-l*l什么意思?(感觉这个循环体有问题哦)
 {
     *(p+i+l)=0;
     if(max(0,i)<min(la,i+lb))   //这句话有什么意义吗?
         for(j=max(0,i);j<min(la,i+lb);j++)//使数组内各值存在
        {*(p+i+l)+=a[j]*b[j-i];//求互相关公式
        printf("%d %d ",j-i,b[j-i]);}//为显示数值发生变化
    printf("\n");
 }
 }
2013-08-27 22:53
xiaozz
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-27
收藏
得分:0 
回复 2楼 shenxiaoke05
void xcorr(int a[],int la,int b[],int lb,int l,int *p)要实现什么功能?能说一下吗?   这是把matlab的互相关指令用c语音编写
void xcorr(int a[],int la,int b[],int lb,int l,int *p);   //这句应该删除,函数定义不应该在主函数里  这句是函数声明
for(int i=0;i<13;i++)     //这里的i<13是为什么? c[]数组的长度不是9吗?为什么越界?  就是这里错了,感谢!c[]的长度短了
int min(int a,int b); //max和min的函数写到这里什么意思?感觉莫名其妙   这个程序要用到max和min函数,这是声明
for(i=-1*l;i<=l;i++)   //这里 i的初始值等于-l*l什么意思?(感觉这个循环体有问题哦)  这句指令是由matlab的互相关指令来的,比如x[-3],x[-2],x[-1],x[0],x[1],x[2],x[3]
  if(max(0,i)<min(la,i+lb))   //这句话有什么意义吗?    这题,比如i=5,max(0,i)=5,min(la,i+lb)=5,if为假。否则for(j=5;j<5;j++)会先执行j=5,再中断,会出错
感谢你的回复
2013-08-28 15:24
guhemeng
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:100
专家分:165
注 册:2013-7-27
收藏
得分:0 
楼主习惯在函数体内做函数声明?  


数组报段错误的唯一原因: 越界操作。
 p = c, c的长度只有9, 但是你p在xcorr()里面要求P的长度最少= 10 ,造成越界操作!编译器是没法检查内存越界的! 所以运行会报段错误。
2013-08-28 20:12
xiaozz
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-27
收藏
得分:0 
回复 4楼 guhemeng
我习惯什么时候用,什么时候声明。想到哪写到哪。以后会试着改进。
为什么数组b的值会发生变化?是由c[]的值反过来求b[]的值吗
2013-08-28 20:47
guhemeng
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:100
专家分:165
注 册:2013-7-27
收藏
得分:0 
回复 5楼 xiaozz
没有懂你的意思?  是不是说b[6]数组的里面的值发生了变化????   这是不可能的!  我刚运行了下,a和b数组都没有变化!

你在main函数最后打印的是 数组c 里面的值,你有检测过 b数组里面的值吗???
2013-08-28 21:28
xiaozz
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-8-27
收藏
得分:0 
回复 6楼 guhemeng
for(j=max(0,i);j<min(la,i+lb);j++)//使数组内各值存在
        {*(p+i+l)+=a[j]*b[j-i];//求互相关公式
        printf("%d %d ",j-i,b[j-i]);}//为显示数值发生变化
我的这个指令在c[]越界时,显示j-i和b[j-i]不对应,不知道为什么
2013-08-29 17:49
快速回复:求助!调用数组时数组值发生变化
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016569 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved