我想知道是否有人可以告诉我两个表达式之间的区别: *(ptr + i)和* ptr + i 它在代码中使用如下:
char string[]="hello";
char *ptr;
ptr=string;
for(int i=0;string[i]!='\0';i++)
{
cout<<*(ptr+i); //*ptr+i
}
答案 0 :(得分:0)
假设你有一个包含3个整数的数组,值为150,200和250.在内存中,这个数组看起来像:
+----------+----------+----------+---
| 96000000 | c8000000 | fa000000 |...
+----------+----------+----------+---
| aka 150 | aka 200 | aka 250 |...
+----------+----------+----------+---
a (a+1) (a+2)
现在,你不是在处理一个整数数组,但整数更容易演示。
指针和数组在C / C ++中基本可以互换,因此在上面的示例中,将a
视为指针。这已经意味着string
和ptr
基本上是同一个变量。
话虽如此,*(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