2014-01-30 44 views
0

爲EXP:此程序無法正常工作時我.. 誰能explian我如何使用正確的方式在這個程序指針,使用功能 節目讓我運行時錯誤如何使用指針函數?

程序應該是通用和返回任何給定的陣列

#include<stdio.h> 
#include<string.h> 

int ReturnSize_INT(void *a) 
{ 
    a = (int*)a; 
    int count = 0 ; 
    int *p = (int*)a; 
    while(p != NULL) 
    { 
     count++; 
     p++; 
    } 
    return count; 
} 
int ReturnSize_char(void *a) 
{ 
    a = (char*)a; 
    int count = 0 ; 
    char *p = (char*)a; 
    while(p != NULL) 
    { 
     count++; 
     p++; 
    } 
    return count; 
} 
int ReturnSize_float(void *a) 
{ 
    a = (int*)a; 
    int count = 0 ; 
    float *p = (float*)a; 
    while(p != NULL) 
    { 
     count++; 
     p++; 
    } 
    return count; 
} 

int main() 
{ 

    int a [] = {1,2,5,7,8}; 
    char b[]={'a','b','c','\0'}; 
    float c [] = {2.75,5.25,7.27,4.25}; 
    int (*ReturnSize)(void *e); 
    ReturnSize = ReturnSize_INT; 
    printf("%d",ReturnSize(&a)); 

    return 0; 
} 
+1

出了什麼問題?編譯錯誤?運行時問題? – doctorlove

+1

'a =(int *)a;' - 什麼?爲什麼? 'while(p!= NULL)' - 'p'永遠不會是'NULL',除非它溢出......你甚至用這個代碼做什麼? – 2014-01-30 13:47:16

+0

a =(int *)a - 假設將a轉換爲int *指針no? – user3253375

回答

2

通行證a給函數的大小 - 不&a。數組的名稱是一個指向數組開頭的指針。其次,在數據數組中沒有終止符。例如,您可以使用標稱值,例如-1。請注意,指針p被取消拒絕(*p)以獲得p值指向:

int a [] = {1,2,5,7,8,-1}; // in main 

int ReturnSize_INT(void *a) 
{ 
    a = (int*)a; 
    int count = 0 ; 
    int *p = (int*)a; 
    while(*p != -1) 
    { 
     count++; 
     p++; 
    } 
    return count; 
}