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