指针!两个表达之间的差异

时间:2016-06-13 18:54:42

标签: c++ pointers

我想知道是否有人可以告诉我两个表达式之间的区别: *(ptr + i)和* ptr + i 它在代码中使用如下:

char string[]="hello";
char  *ptr;
ptr=string;
for(int i=0;string[i]!='\0';i++)
{
cout<<*(ptr+i); //*ptr+i
}

1 个答案:

答案 0 :(得分:0)

假设你有一个包含3个整数的数组,值为150,200和250.在内存中,这个数组看起来像:

 +----------+----------+----------+---
 | 96000000 | c8000000 | fa000000 |...
 +----------+----------+----------+---
 | aka 150  | aka 200  | aka 250  |...
 +----------+----------+----------+---
 a          (a+1)      (a+2)

现在,你不是在处理一个整数数组,但整数更容易演示。

指针和数组在C / C ++中基本可以互换,因此在上面的示例中,将a视为指针。这已经意味着stringptr基本上是同一个变量。

话虽如此,*(pointer+i)*pointer+1之间的差异是应用1的区别。在第一种情况下,它是指针的地址。在第二种情况下,它是指针指向的。继续上面的例子:

int x = *a+1; // x is 151
int y = *(a+1); // y is 200
int z = *(a+1)+1; // z is 201