char c; char * c; char c [];混乱

时间:2015-11-24 07:54:40

标签: c

我的问题发生在我试图在c中编写链表时。我通过以下各种教程使程序工作,但我不完全理解指针的使用。当我开始设计我自己的结构/列表时,他们没有工作,我在编译中遇到了很多浮点错误。我查了一下,当指针被误用时会发生这种情况。我不希望有人修改我的代码 - 因为那样我就不会知道我想要学习什么。如果有人可以,请解释之间的区别:

char c;
char *c;
char c[];

以及如何和/或何时使用它们。

2 个答案:

答案 0 :(得分:2)

char c是宝箱。 char *c是一篇论文,可以放下藏宝图。它可以是假地图,也可能是空白的。 char c[]是一张藏宝图专辑,其中没有一张是假的或空白的(其中一张在封面上,所以你可以将这张专辑本身作为其中的第一张藏宝图)。

呃,好的。第一个c包含从-128到127的数字。第二个是指向字符的指针;它告诉你角色在哪里。或者它只是说NULL,所以你知道它没有指向任何东西。第三个是角色所在的位置;与指针不同,你不能改变它,它总是指向已经分配的位置,它有一个大小;但你可以在很多情况下使用它,就好像它是指针一样。

答案 1 :(得分:0)

好的,char c是包含8位数的变量的定义。 char* c是一个变量,它包含存储8位数的变量的地址。因此,您必须首先了解的是*&运算符的含义: &运算符表示“从中获取地址”。例如,如果你有类似的东西:

char c = 'a';

然后你声明并定义了一个名为“c”的变量。该变量的内容是字母“a”。

现在让我们声明一个指针:

char* cPtr;

正如您所知,“cPtr”是一个包含char变量地址的变量。因此,让我们将变量“c”的地址分配给指针变量“cPtr”:

cPtr = &c;

现在我们的指针变量包含变量“c”的地址。我们现在可以做的是通过我们的指针“cPtr”访问变量“c”的内容,方法是将我们的指针变量加上*运算符。因此*运算符意味着“获取此指针指向的变量的内容”。当我写下这样的东西时:

char b = *cPtr;

然后我创建一个新变量“b”并赋值变量“c”的值。它相当于char b = c,因为我已经取消引用了指针变量cPtr,这意味着我使用了存储在“cPtr”中的指针(地址)来访问c的内容。

现在我们创建一个char值数组:

char cArray[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

此数组是6个char值的序列,它们以相同的顺序放在内存中。所以在内存的第一个位置你有值'H',内存中的下一个位置包含值'e',依此类推。这里的困难是你需要索引来访问单个值。所以如果你写的东西如下:

char a = cArray[1];

然后将数组的“e”复制到变量“a”。

现在令人困惑的是,数组也可以像指针一样被处理:

char* arrayPtr;
arrayPtr = cArray;

这意味着您已将第一个数组元素的地址分配给指针变量arrayPtr。所以你必须知道你是否使用没有索引的数组名称,那么你将使用指向数组第一个元素的指针。

所以如果你使用

创建一个字符串
char* myString = "Hello";

然后(在引擎盖下)你创建一个char变量数组,如cArray所示。