2017-04-10 49 views
1

我想弄清楚如何使用指针。如何将char'a'设置为char指针数组?

我如何插入一个单独的字符为char * 2号线混淆[80]

这甚至可能为此而不引用另一个指针的内存位置?

我的思考过程是在* line2 [0] ='a'时,字符'a'将位于数组的索引0处。

是如何从这个线不同[0] = 'A'

#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

当您分配

char* line2[80]; 

您正在分配一个阵列的80个字符指针

当您使用

*line2[0] = 'a'; 

你引用未定义的行为。这是因为您正在分配指针line2[0],但指针未初始化并且可能未指向内存中的任何有效位置。

您需要将指针初始化为内存中的某个有效位置才能使用。要做到这一点的典型方法是使用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); 

你正在做在上面的程序是什么分配C字符串的二维数组。 line2[0]是第一个字符串。同样,你可以再分配79个字符串。

+1

有一点要注意。使用malloc时,必须添加头文件#include 。 Malloc是我相信内存分配的简称。只是想补充一点,以备将来参考。谢谢。 +1 – pewpew

+1

它是一个由80个字符指针组成的数组。不是80个阵列。 –

+0

它不会是一个1d数组吗? 2d数组不会是char * line2 [80] [80]吗?或者这是指针的独特之处? – pewpew

1

您必须已经阅读过,指针是c中的一个特殊变量,它存储了另一个变量datatype的另一个变量的地址。

的如: -

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'位置来初始化你想要的变量(无论是一个普通的'变量'还是'一个数组')的'BaseAddress',然后''取消引用'读它的价值 – manish