言語:C言語
コンパイラ:gccまたはVC++2008
char *p[10] = {"str1"."str2","str3"};
この場合はコンパイラが自動的にポインタ変数のメモリを静的確保していて、
char *p[10];
この場合はポインタ変数のメモリが確保されないので上と同じような動作を作りたい場合は自分でメモリを動的に確保して使用する、と思っておりました。
しかし、
p = (char**)calloc(3, sizeof(char*));
このような記述をしてもコンパイラに通りません。
ただ単に p と表記した場合はchar型ポインタのポインタになっていると思っていましたが、違うのでしょうか?
もし、違うのならこの場合どのようにメモリを確保することが正しいでしょうか?
いつもは以下のように行っていますが、上の方法でできないか気になったのでよろしくお願いします。
int i; char **p; p = (char **)calloc(3, sizeof(char*)); for(i = 0; i < 3; i++) p = (char *)calloc(10, sizeof(char));
