2010-11-03 98 views

回答

8

句法:
變化
typedef char (*p)[20] ptr;

typedef char (*ptr)[20];

要了解的typedef聲明,這樣的語法。假設你想重命名類型T來鍵入U.聲明一個名爲U的類型T的變量,並用'typedef'作爲該聲明的前綴。就這樣。

語義:
見我和其他回答您的鏈接的問題。這仍然是未定義的行爲

4

你正在返回一個指向內存的指針,當myFunction()返回時不再存在。

2

主要問題是substr是本地myFunction,並且一旦myFunction退出它不再存在,所以您返回的指針將不再有效。

其次,您沒有正確使用typedef。正確的語法將是

typedef char (*ptr)[20]; 

在語法上,typedef基本上就像一個存儲類說明類似於staticextern(雖然語義不同)。基本上,你找出聲明的對象

char (*ptr)[20]; // ptr is a pointer to a 20-element array of char 

然後添加typedef它:

typedef char (*ptr)[20]; 

不知怎的myFunction需要以這樣的方式,它是不盡快銷燬分配內存作爲函數退出。這裏有一個選項:

typedef char (*ptr)[20]; 
ptr myFunction(size_t count) 
{ 
    /** 
    * Dynamically allocate a block of N 20-element arrays of char 
    */ 
    ptr p = malloc(sizeof *ptr * count); 
    return p; 
} 

int main(void) 
{ 
    ptr str = myFunction(10); 
    size_t i, j; 

    for (i = 0; i < 10; i++) 
    for (j = 0; j < 20; j++) 
     str[i][j] = ...; 
    ... 
    free(str); 
    return 0; 
}