子函数数组的传递

函数需要一个子函数找出指定数值以内的质数,一开始在main里声明指针,子函数类型设为返回局部指针,程序正常运行,但有warning: function returns address of local variable。

//Pointers on C exercise 6.4
//date 2013/8/13
//1000以内的质数
#include<stdio.h>
#define TURE 1
#define FALSE 0

int *eratosthenes( int upmost );

int main(){
    int const up = 1000;
    int i = 0;
    int *test;
    test = eratosthenes( up );
    for( i = 0; i < up; i++ ){
        if( test[ i ] == TURE ){
            printf( "%d\n", i );
        }
    }
    return 0;
}

int *eratosthenes( int const upmost ){
    int i = 0;
    int j = 0;
    int testlist[ upmost ];
    testlist[ 0 ] = FALSE;
    testlist[ 1 ] = FALSE;
    for( i = 2; i < upmost; i++ ){
        testlist[ i ] = TURE;
    }
    for( i = 2; i < upmost; i++ ){
        if( testlist[ i ] == TURE ){
            for( j = i + i; j < upmost; j = j + i){
                testlist[ j ] = FALSE;
            }
        }
    }
    return testlist;
}

将子函数里数组声明改成

extern int testlist[ upmost ];

E:\programming pearls\6.4\6.4.c|26|error: object with variably modified type must have no linkage|

E:\programming pearls\6.4\6.4.c|26|error: storage size of 'testlist' isn't constant|

E:\programming pearls\6.4\6.4.c|26|warning: unused variable 'testlist' [-Wunused-variable]|

static int testlist[ upmost ];

E:\programming pearls\6.4\6.4.c|26|error: storage size of 'testlist' isn't constant|

E:\programming pearls\6.4\6.4.c|26|warning: unused variable 'testlist' [-Wunused-variable]|

 

最后解决办法是将数组作为参数传递给函数

//Pointers on C exercise 6.4
//date 2013/8/13
//1000以内的质数
#include<stdio.h>
#define TURE 1
#define FALSE 0

void eratosthenes( int upmost , int *testlist );

int main(){
    int const up = 1000;
    int i = 0;
    int test[ up ];
    eratosthenes( up, test );
    for( i = 0; i < up; i++ ){
        if( test[ i ] == TURE ){
            printf( "%d\n", i );
        }
    }
    return 0;
}

void eratosthenes( int const upmost, int *testlist ){
    int i = 0;
    int j = 0;
//    int testlist[ upmost ];
    *testlist = FALSE;
    *( testlist + 1 )= FALSE;
    for( i = 2; i < upmost; i++ ){
        *( testlist + i  ) = TURE;
    }
    for( i = 2; i < upmost; i++ ){
        if( *( testlist + i  ) == TURE ){
            for( j = i + i; j < upmost; j = j + i){
                *( testlist + j  ) = FALSE;
            }
        }
    }
 //   return testlist;
}

 

转载于:https://www.cnblogs.com/jwplus/p/3255488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值