在Schaum的C++书籍中学习代码,我看到很多使用char *,int *等的代码。 做了练习,我还看到在解决方案中有char *,并且在我的代码中我使用了char(没有星)。在C++中char和char *有什么区别?
我想知道一个char和一个指针char - integer和一个指针整数之间的区别是什么?我应该在哪里使用它们?他们的意思究竟是什么?
在Schaum的C++书籍中学习代码,我看到很多使用char *,int *等的代码。 做了练习,我还看到在解决方案中有char *,并且在我的代码中我使用了char(没有星)。在C++中char和char *有什么区别?
我想知道一个char和一个指针char - integer和一个指针整数之间的区别是什么?我应该在哪里使用它们?他们的意思究竟是什么?
带有*
的变量是指针。
“普通”变量(例如char或int)包含该数据类型本身的值 - 该变量可以包含一个字符或一个整数。
指针是一种特殊的变量;它不包含值本身,它包含内存中的值的地址。例如,char *
不直接包含字符,但它包含计算机内存中某个字符的地址。
您可以通过使用&
采取“正常”变量的地址:
char c = 'X';
char * ptr = &c; // ptr contains the address of variable c in memory
而你通过指针使用*
得到内存的值:
char k = *ptr; // get the value of the char that ptr is pointing to into k
见Pointer (computing)在维基百科。
对于char或int,变量值是实际分配的值 - “a”或42.对于char *或int *,变量值是存储实际分配值的位置。因此,*表示变量指向存储器中可找到值的位置。
指针指向特定变量的内存地址。起初有些人可能很难理解指针,关于它的更多信息请参见wikipedia。
char *是一个指向内存中字符序列的指针,以'\ 0'结尾。一个字符代表一个字符。 int *将内存地址保存为整数值。
实施例:
int* x = new int();
我们在堆上创建一个新的整数变量,并且在存储器中的位置被保存在指针。指针现在指向整数所在的内存部分。如果我想使用的整数值的指针指向的话,我会叫:
int y = *x;
这解引用的内存地址;它获得指针后面的值。 y的值将成为指针指向的内存后面的数据类型的值。
我不得不买一本关于C语言的书,只是在指针上,但是一旦我理解了它们,C就变得易于编程了。 – 2009-09-26 19:24:46
您应该阅读您书中解释指针的第7章 - 您可能需要多个简短的答案才能真正理解该主题。
当你有char或者int或者long或者类似的东西时,那么内存将被留出来保存这个值,所以char是一个1字节的内存用于存储。
该字节的地址是指针指向的地址。
当你有一个字符串或连续的char行时,这很有帮助,因为你可以指向该字符串的开始,并将它传递给另一个函数,以便该函数可以使用字符串中的实际值。
所以,你用星号表示指针。
带*的变量是指针。这意味着它们包含一个内存地址,而没有*的变量包含值。
所以一个字符包含一个字符值如'a'或'Z'。 char *指向一个内存区域,您可以通过char访问值char。
int变量包含一个整数值,如1或12345. int *指向可以通过int访问int值的内存区域。
对于所有其他类型都是如此。
实施例:
// pointer declaration
char* pchar = new char[5];
此分配5 *的sizeof(char)的一个存储器区和可以访问5个字符。
当你的指针不再需要时,不要忘记释放内存。
// pointer destruction
delete pchar;
您的示例没有分配5个字符的数组。它分配一个字符值为5. – erikkallen 2009-09-26 20:55:04
糟糕使用'()'而不是'[]'。感谢您将它指向我 – 2009-09-27 08:04:31
OK,
我会在这坐刺。 char
和char*
之间的区别是编译器将变量放在您使用的内存中。
char c
是一个堆栈声明。容器保存您放入其中的数据的值,并应用堆栈范围规则。当你击中方法体的末尾时,c
会“超出范围”并自动清理。
char *c
是一个指针变量。这意味着,变量不会保存您放入其中的数据的值,而是存储在内存中的地址,通常称为“内存地址”。然后我们说c
是“堆”,你,程序员负责清理它。所以当c
超出范围时不会自动清理,您需要调用delete
来释放内存。
*
,是一元运算符,也被称为deferencing operator
。
这里是一个很好的维基Dereference_operator
指针不一定指向堆上的内存。有关指向堆栈内存的示例,请参阅Jesper的回答。 – Chuck 2009-09-26 20:33:28
char是一个值类型,因此引用该类型的变量得到一个字符。例如,
char ch = 'a';
cout << ch; // prints a
char *是一个指向字符的指针,通常用于迭代字符串。例如,
char* s = "hello";
cout << s; // prints hello
s++;
cout << s; // prints ello
应该阻止人们回答? – 2009-09-26 20:52:41
char *通常用于遍历字符数组,即C字符串。与其他指针通常使用的方式不同,它很少用作指向单个字符的指针。 C++具有通常应该使用的更新的字符串结构。 – UncleO 2009-09-26 21:38:44