下に2つのコードサンプルがあります。最初の私はドットでのみ動作することができます。私は矢印 - >演算子でしか動かすことができません。しかし、なぜ?どちらの場合でもポインタはありませんか?Cの矢印と点の演算子
矢印のコード - >演算子:
#include <stdlib.h>
#include <stdio.h>
typedef struct{
double **plist;
} ParticleList;
void sendPar(ParticleList *pl, int *n, int np){
pl -> plist = malloc(sizeof(double*) * np);
for(int p=0; p<np; p++){
pl->plist[p] = malloc(sizeof(double) * n[p]);
}
for(int p=0; p<np; p++){
for(int k=0; k<n[p]; k++){
pl->plist[p][k] = k+1;
}
}
}
int main(){
ParticleList pl;
int np = 3;
int n[np];
n[0] = 2;
n[1] = 4;
n[2] = 7;
sendPar(&pl, n, np);
}
ドットのためのコード。演算子:
#include <stdlib.h>
#include <stdio.h>
typedef struct{
double **plist;
} ParticleList;
void sendPar(int *n, int np){
ParticleList pl;
pl.plist = malloc(sizeof(double*) * np);
for(int p=0; p<np; p++){
pl.plist[p] = malloc(sizeof(double) * n[p]);
}
for(int p=0; p<np; p++){
for(int k=0; k<n[p]; k++){
pl.plist[p][k] = k+1;
}
}
free(pl.plist);
}
int main(){
int np = 3;
int n[np];
n[0] = 2;
n[1] = 4;
n[2] = 7;
sendPar(n, np);
}
どちらのバージョンも有効ですか、それとも違いがありますか?
"どちらの場合でもポインタはありませんか?"いいえ、「ParticleList * pl」と「ParticleList pl」の違いは見えませんか? – itsme86
便利な質問:http://stackoverflow.com/questions/2575048/arrow-operator-usage-in-c?rq=1 –
ドット '.'と矢印' - > '演算子は非常に緊密に結びついていますスペースで囲むべきではありません。 –