C ++中char和char *之间有什么区别?

时间:2009-09-26 19:16:22

标签: c++ pointers

在Schaum的C ++书中学习代码,我看到了很多使用char *,int *等的代码。 做练习我也看到在解决方案中有char *并且在我的代码中我使用了char(没有星号)。

我想知道char和指针char之间有什么区别 - 整数和指针整数?我应该在哪里使用它们?他们的意思究竟是什么?

8 个答案:

答案 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)

行,

我会捅这个。 charchar*之间的区别在于编译器将变量放入您使用的内存中。

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;