2017-04-10 9 views
1

私はポインタの使い方を理解しようとしています。charポインタ配列にchar 'a'を設定するには?

私がするchar * LINE2に、個々の文字を挿入する方法について混乱している[80]

は、これは別のポインタのメモリ位置を参照せずにこれを行うことも可能ですか?

私の思考プロセスは、* line2 [0] = 'a'で文字 'a'が配列のインデックス0にあるということです。あなたは

char* line2[80]; 

を割り当てると、これはラインと異なっている[0] = ''

#include <stdio.h> 

void returnValue(void); 

int main(void){ 
    returnValue(); 

} 


void returnValue(){ 
    char line[80]; 
    line[0] = 'a'; 
    line[1] = '\0'; 
    printf("%s",line); 

    char* line2[80]; 
    *line2[0] = 'a'; 
    *line2[1] = '\0'; 
    printf("%s",*line2); //program crashes 
} 

答えて

1

あなたは80の文字ポインタの配列を割り当てている方法

。あなたは

*line2[0] = 'a'; 

を使用する場合

あなたは未定義の動作を参照しています。これは、ポインタline2[0]を割り当てるためですが、ポインタが初期化されておらず、メモリ内の有効な場所を指していない可能性があります。

これを有効にするには、ポインタをメモリ内の有効な場所に初期化する必要があります。これを行うための一般的な方法は、あなたがC文字列の2次元配列を割り当てて上記のプログラムでやっているmalloc

line2[0] = malloc(10); // Here 10 is the maximum size of the string you want to store 
*line2[0] = 'a'; 
*(line2[0]+1) = '\0'; 
printf("%s",*line2); 

用いることであろう。 line2[0]は1番目の文字列です。同様に、さらに79個の文字列を割り当てることができます。

+1

注意すべき点も1つあります。 mallocを使用する場合は、ヘッダファイル#include を追加する必要があります。 Mallocは、私が信じるメモリ割り当ての略です。ちょうどそれを将来の参照のために追加したかったのです。ありがとうございました。 +1 – pewpew

+1

80文字のポインタのうちの1つの配列です。 80個の配列ではありません。 –

+0

まだ1dアレイではありませんか? 2次元配列はchar * line2 [80] [80]ではないでしょうか?または、これはポインタに固有のものですか? – pewpew

1

あなたは既に読んでいなければなりません。ポインタは、同じdatatypeの別の変数のアドレスを格納するcの特別な変数です。

などのため

: - あなたの例でも同様に

char a_character_var = 'M'; 
char * a_character_pointer = &a_character_var; //here `*` signifies `a_character_pointer` is a `pointer` to `char datatype` i.e. it can store an address of a `char`acter variable 

char* line2[80];80charポインタ

使い方

line2[0] = &line[0]; 

の配列であり、あなたが書くことによってそれにアクセスすることができます。 *line2[0]これは、出力としてaを出力します。

+0

両方の配列の場合、a_character_pointerをa_character_varに設定する方法はありますか? char * a_character_pointer [0] = a_character_var [0]?配列が大きければどうなるでしょうか? – pewpew

+0

'pointer'の位置を増やすだけで、' pointer'に必要な変数の 'BaseAddress'(単純な' variable'または 'array')を初期化し、' dereference'する必要があります。値を読み取る – manish

関連する問題