2016-01-10 81 views
0

這裏是我的源代碼,這是不言自明的,我希望在這裏得到一些幫助。一切工作正常矩陣1但循環中的代碼矩陣2生成一個錯誤。 *(matrix1+i)*matrix1[i]有什麼區別?我沒有看到任何=(*(matrix1 + i)和* matrix1 [i]之間的區別?

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

void example(){ 
int i; 
int qty = 5; 
char **matrix1 = (char**)malloc(qty*sizeof(char));//matrix example(1) 
char **matrix2 = (char**)malloc(qty*sizeof(char));//matrix example(2) 
    for(i=0;i<qty;i++){ 
    //Why the heck may i allocate each vector in this way: 
    *(matrix1+i) = (char*)malloc(100*sizeof(char)); 
    //...but not in this way(the code below generates an error): 
    *matrix2[i] = (char*)malloc(100*sizeof(char)); 

    //And why the heck may i use strcpy this way: 
    strcpy(*(matrix1+i),"some string"); 
    //...but not in this way(the code below generates an error): 
    strcpy(*matrix2[i],"some string"); 
    } 
} 

int main(void){ 
example(); 
getch(); 
return 0; 
} 
+0

不要把'',alloc'和朋友的結果放在C中。提示:'* matrix1 [i]'和'**(matrix1 + i)'是一樣的。注意區別? – Olaf

+0

'* matrix [i]'與'**(matrix + i)'相同。 –

+0

是的,我明白了,現在看來對我來說很明顯=) – Ganzert

回答

3

*(matrix1+i)是指向具有索引i的二維數組並且具有類型char*的行的指針。但是*matrix2[i]是索引爲i並且類型爲char的行中的第一個元素。

雖然*(matrix1+i)matrix1[i]相同,但是*matrix2[i]**(matrix2+i)相同。

適應你的代碼是這樣的:

char **matrix1 = (char**)malloc(qty*sizeof(char));//matrix example(1) 
char **matrix2 = (char**)malloc(qty*sizeof(char));//matrix example(2) 
for(i=0;i<qty;i++){ 

    *(matrix1+i) = (char*)malloc(100*sizeof(char)); 
    matrix2[i] = (char*)malloc(100*sizeof(char)); 
    .... 
} 
2

*(matrix1+i)相當於matrix1[i],是char *型的,而*matrix2[i]被取消引用指針matrix1[i],是char類型。

2

a[b]相同*(a+b)

所以*(matrix1+i)*matrix1[i]之間的區別是* S上的號碼:

  • ,還有一個,在後者
  • ,有兩個(其中一個隱藏在[]語法背後)。
相關問題