我目前正在学习指针,但我有几个问题:
当我们说int a[] = {10, 11}; int *p = a,编译器将为指针分配内存p(指向数组的第一个地址).但是如果我们说p + 1,这是否意味着某些内存已经被一个名为p + 1?的新指针初始化了?
如果上面的答案是否定的,即没有分配内存p + 1:当我们使用时*(p + 1),我们仍然可以获得该值11.这是否意味着*可以在没有指针的情况下使用此符号(只要我们知道地址)?
是的,*可以在没有指针变量的情况下使用,它只是一个操作符.它需要应用于指针类型的表达式,但该表达式不必是单个变量名称.
例如:
int x = 42;
*(&x) = 4711;
Run Code Online (Sandbox Code Playgroud)
上述套x到4711使用*操作者,但有在代码没有单独的指针变量.返回值的类型&x当然是int *"指向整数的指针",这是一种*可以使用的类型.
表达式p + 1只是一个表达式,可以对其进行求值,结果可以使用(或丢弃,具体取决于上下文).它不是"指针",尽管结果值是表达式本身不是的指针.