inita(a *c){ d e=&f; e->g=c;}中c是*c传入,赋值时候不带*,两者有什么区别
时间: 2024-09-13 12:09:46 浏览: 32
cr:cr.h:一个简单的C热重载标头库
在C语言中,函数参数的传递方式会对函数内部的处理产生影响。在您提供的代码片段中:
```c
inita(a *c) {
d e=&f;
e->g=c;
}
```
这里似乎有一些语法错误,但我会先纠正它们,并解释参数传递的差异。
首先,让我们假设您想要表达的是:
```c
void inita(int *c) {
Data *e = &f;
e->g = *c;
}
```
在这个修正后的函数中,`c` 是一个指向 `int` 类型的指针,即 `int*` 类型的参数。这意味着函数 `inita` 接收的是一个指针,它指向一个 `int` 类型的变量。当您在函数内部使用 `*c` 时,您实际上是在进行解引用操作,获取 `c` 指针所指向的值。而直接使用 `c` 则是指针本身的值,即内存地址。
具体来说,这里涉及到两个概念:
1. **指针传递(不带 `*`)**:如果函数参数是 `int *c`,那么您传递的是指向变量的指针的值,也就是内存地址。
2. **解引用(带 `*`)**:如果在函数内部您使用 `*c`,那么您获取的是指针所指向的值,而不是地址。
两者的主要区别在于:
- **指针传递**允许函数通过指针直接修改调用者的变量值(如果传递的是变量的地址),因为指针存储的是地址。
- **解引用**允许函数获取指针指向的实际数据值,进行读取或修改。
如果您想要在 `inita` 函数中修改外部变量的值,您需要传递变量的地址,然后在函数内部解引用该指针来修改值。
阅读全文