声明特定类型的指针时实际发生了什么?除了指针算术或索引之外,指针的类型是否有用?
答案 0 :(得分:10)
其中一个原因可能是当您取消引用指针时,我们应该知道要读取多少字节?取消引用char
指针意味着从内存中取出一个字节,而对于int
它可能是4个字节。
答案 1 :(得分:4)
以下情况需要指针类型
以下是取消引用指针的示例。
{
char *ptr; //pointer of type char
short j=256;
ptr=&j; // Obviously You have to ignore the warnings
printf("%d",*ptr)
}
现在因为ptr
是char类型所以它只读取一个字节。但二进制值256是0000000100000000
,但因为ptr
的类型为char
所以它只读取第一个字节,因此输出将为0
。
注意:如果我们指定j = 127,则输出将为127,因为127将由第一个字节保持。
现在,pointer arithmetic
的例子:
{
int *ptr;
int var=0;
ptr=&var;
var++;
ptr++;// pointer arithmetic
}
陈述var++
和ptr++
是一回事吗?不,var++
表示var=var+1
,ptr++
表示ptr=ptr+4
。因为编译器“知道”这是一个指针并指向int
,所以它将4
添加到ptr
而不是1,因此指针“指向”下一个整数。
答案 2 :(得分:1)
指针是一个变量,其值是另一个变量的地址
以下是指针类型的几个示例:
int *ip; /* pointer to an integer */
double *dp; /* pointer to a double */
float *fp; /* pointer to a float */
char *ch /* pointer to a character */
所有指针值的实际数据类型,无论是整数,浮点数,字符还是其他,都是相同的,是一个代表内存地址的长十六进制数。
不同数据类型的指针之间的唯一区别是指针所指向的变量或常量的数据类型
答案 3 :(得分:1)
char
不同。long
和sizeof
,代表也可能会有所不同。如果您指定_Alignof
,则*float_ptr = 4
会转换为4
。4.0
等严重不当行为。答案 4 :(得分:0)
取消引用指针时需要数据类型,以便它知道应该读取多少数据。
例如:取消引用char指针应该从它指向的地址读取下一个字节,而int指针应该读取两个字节。
请参阅此内容以获取更多信息:Why is it necessary to declare the types that pointers point to?
答案 5 :(得分:0)
指针也指向类的有效对象。如果没有类型1,则无法获取访问班级成员的信息。
class CPerson
{
public:
std::string GetName();
};
CPerson oPerson;
CPerson *pObj_1 = &oPerson;
pObj_1->GetName();
void *pObj_2 = &oPerson;
pObj_2-> ?? // what all I can access now ?