函数需要一个子函数找出指定数值以内的质数,一开始在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; }