C语言指针和变量的区别
指针和变量主要是两个区别:
- 无论是通过函数传递一个变量,还是把变量赋值给另一个变量(比如dest = src),都需要复制这个变量,效率比较低,特别是变量大小比较大的时候;
而使用指针只需要从变量地址中读取变量本身的值,效率比较高;
所以直接使用变量的方式适合变量大小比较小的情况,此时使用指针反而效率低,因为还要通过指针间接访问变量;
一般变量特别大,比如内核里面很多结构体都是超级大的,可能大小都有接近1K个字节,这种情况下就使用指针,能极大地提高代码运行效率; - 传递变量的指针给函数,可以通过指针改变这个变量自身的值,如果传递变量值给函数,那就改变不了变量自身的值,只能使用这个变量;
如果传递了一个变量的指针,但又不希望被调用者改变这个变量的值,那就加上一个const修饰符,比如:
int func(const struct task_info *ti)
{
...
};
如果是返回指针的话,那一搬是一个全局的变量或者调用者和被调用函数都能够访问这个变量的时候,相当于用这个变量在调用者和调用者之间传递信息,即这个变量的作用域覆盖了调用者和被调用者,不然就是非法访问,比如下面这个,等到调用者访问这个被调用函数内部的变量a时,变量a的生命周期已经结束,可能里面的指是随机的。
int *func(int arg1)
{
int a = 2 * arg1;
return &a;
}
int main()
{
int result = *func(5);
return result;
}