在Schaum的C ++书中学习代码,我看到了很多使用char *,int *等的代码。 做练习我也看到在解决方案中有char *并且在我的代码中我使用了char(没有星号)。
我想知道char和指针char之间有什么区别 - 整数和指针整数?我应该在哪里使用它们?他们的意思究竟是什么?
答案 0 :(得分:7)
*
的变量是指针。
'normal'变量,例如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)。
答案 1 :(得分:5)
你应该阅读你书中解释指针的第7章 - 你可能需要不止一个简短的答案才能真正理解这个主题。
答案 2 :(得分:2)
指针指向特定变量的内存地址。有些人一开始可能很难理解指针,有关wikipedia的更多信息。
char *是指向内存中字符序列的指针,以'\ 0'结尾。单个字符代表一个字符。 int *将内存地址保存为整数值。
示例:
int* x = new int();
我们在堆上创建一个新的整数变量,内存中的位置保存在指针中。指针现在指向整数所在的内存部分。如果我想使用指针所指向的整数的值,那么我会调用:
int y = *x;
取消引用内存地址;它获得指针后面的值。 y的值成为指针指向的内存后面的数据类型的值。
答案 3 :(得分:1)
当你有char或int或long或类似的东西时,会留出内存来保存值,因此,char是1字节的内存用于存储。
该字节的地址是指针指向的地址。
当你有一个字符串或一个连续的char行时,这很有用,因为你可以指向该字符串的开头,然后将它传递给另一个函数,这样该函数就可以使用字符串中的实际值。
因此,您使用星号表示指针。
答案 4 :(得分:0)
使用char或int,变量值是实际分配的值 - 'a'或42.对于char *或int *,变量值是内存中保存实际分配值的位置。因此,*表示变量指向内存中可以找到值的位置。
答案 5 :(得分:0)
行,
我会捅这个。 char
和char*
之间的区别在于编译器将变量放入您使用的内存中。
char c
是一个堆栈声明。容器保存您放入其中的数据的值,并应用堆栈范围规则。当您点击方法体的末尾时,c
将“超出范围”并自动清理。
char *c
是一个指针变量。这意味着,变量不会保存您放入其中的数据的值,而是保存在内存中的地址,通常称为“内存地址”。然后我们说c
是“在堆上”而你,程序员负责清理它。因此,当c
超出范围时,它不会自动清理,您需要在其上调用delete
来释放内存。
*
是一元运算符,也称为deferencing operator
。
这是一个很好的维基Dereference_operator
答案 6 :(得分:0)
char是一种值类型,因此引用该类型的变量会获得一个char。如,
char ch = 'a';
cout << ch; // prints a
char *是一个指向char的指针,通常用于迭代字符串。例如,
char* s = "hello";
cout << s; // prints hello
s++;
cout << s; // prints ello
答案 7 :(得分:-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;