int i = 10;
int *p = &i;
printf("%d\n", *p);
Run Code Online (Sandbox Code Playgroud)
打印出10.
但是,如果我写
int i = 10;
int *p;
p = &i;
printf("%d\n", *p);
Run Code Online (Sandbox Code Playgroud)
输出也是10.有什么区别吗?第二个实际上对我更有意义,因为它说p的值是i的地址,所以当取消引用p时,它得到i的值.所以我很困惑*p =&p在顶部做什么?
再举个例子,
int main() {
int i = 10;
func (&i);
return 0;
}
void func (int * p) {
*p = 15;
}
Run Code Online (Sandbox Code Playgroud)
当我被传递给func时,我可以将其视为*p =&i?由于C函数超过值?
在第一种情况下,您创建p一个指针并i在单个操作(初始化)中为其分配地址.
在第二种情况下,您创建p一个指针(它指向随机存储器地址或NULL,具体取决于编译器和优化)然后在它应该指向的下一行上说i.
最终结果完全相同,编译器可能会优化到完全相同的代码中.
注意:注意明星意味着什么:int* p类似于int *p和指的p是"指向int"的类型.定义p后,*p取消引用指针.
| 归档时间: |
|
| 查看次数: |
1302 次 |
| 最近记录: |