2012-04-10 7 views
-3

J'ai du mal à comprendre où je peux utiliser un pointeur sur un tableau, par exemple: char (*a)[10];. Donc deux questions de base.valeur d'un pointeur vers un tableau char vs pointeur char plain

  1. Veuillez me donner un exemple simple de la façon dont un simple pointeur vers un tableau peut être utilisé dans le code C. Pourquoi voudrait-on l'utiliser comme juste pour déclarer une variable comme un pointeur, puis incrémenter/décrémenter l'adresse après ce point.
+4

autant de duplications possibles de cette question dans notre base de données que je ne sais pas par où commencer. Utilisez la boîte de recherche. :) – karlphillip

+2

Je pense que vous allez à l'envers. Au lieu d'essayer de trouver un problème qui pourrait être résolu avec le type X, vous commencez normalement avec un problème et trouvez comment le résoudre ... –

+0

Je pense que vous avez tous manqué le point. L'OP demande pourquoi le sucre syntaxique des parenthèses est meilleur que simplement avoir un pointeur char qui se trouve à pointer vers un tableau. – mydogisbox

Répondre

0

Dites que vous avez une requête de base de données qui renvoie un ensemble de chaînes. En outre, dites que vous savez que ces chaînes ne dépassent pas 9 caractères. Seulement, vous ne savez pas combien d'éléments sont dans l'ensemble retourné par la requête.

char (*a)[10] = malloc(NumRecords * sizeof *a); 
if (a == NULL) 
{ 
    /* Handle error appropriately */ 
    return EXIT_FAILURE; /* Naive */ 
} 

for (i = 0 ; i < NumRecords ; ++i) 
{ 
    assert(strlen(DbRecordSet[i]) < 10); 
    strcpy(a[i], DbRecordSet[i]); 
} 
0

Exemple: comment imprimer les éléments d'un tableau de num_row lignes et 3 colonnes:

#include <stdio.h> 

#define NUM_ROW(x) (sizeof (x)/sizeof *(x)) 

// print elements of an array of num_row rows and 3 columns 
void print(int (*a)[3], size_t num_row) 
{ 
    size_t num_col = sizeof *a/sizeof **a; 

    for (int i = 0; i < num_row; i++) { 
     for (int j = 0; j < num_col; j++) { 
      printf("%d\n", a[i][j]); 
     } 
    } 
} 

int main(void) 
{ 
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; 
    int b[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 

    print(a, NUM_ROW(a)); 
    print(b, NUM_ROW(b)); 

    return 0; 
} 
+0

L'inconvénient de ceci est que 'print' ne fonctionnera qu'avec les tableaux Nx3; Si vous voulez imprimer un tableau Nx4, vous devez utiliser une fonction différente. –

0

Chaque fois que vous passez une expression avec un type de tableau à plusieurs dimensions à une fonction, vous re va travailler avec un pointeur vers un tableau:

int a[10][20]; 
foo(a); 

void foo(int (*p)[20]) // or int p[][20] 
{ ... }