为什么要指定指针类型?

时间:2016-08-08 06:39:41

标签: c++ c pointers

声明特定类型的指针时实际发生了什么?除了指针算术或索引之外,指针的类型是否有用?

6 个答案:

答案 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+1ptr++表示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)

  • 大小:您访问了多少字节?读/写1 {1}}字节与写{≥1}八位字节的char不同。
  • 对齐:两种类型的长度可能相同,但对齐方式不同。一种数据类型可能被放入一个特殊的寄存器中,并且从/向这些寄存器移动的存储器具有特殊的对齐要求。
  • 代表:即使使用相同的longsizeof,代表也可能会有所不同。如果您指定_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 ?