文章发布于:2024年1月19日
声明一个指针:
int* p;
假如要将指针指向一个整数变量,该怎么做呢?
int* p;
int n = 10;
*p = n;
直觉上应该这样写,但这是不对的,正确的应该这样:
int* p;
int n;
p = &n;
*p = 10;
因为在指针被声明时,指向是随机的。第一种方法,当执行 *p = n 时,此时相当于在指针 p 随机指向的位置,赋予变量 n,这可能引起问题。在第二种例子,通过 &n 操作取得变量地址,然后指针指向这个地址,这样再执行 *p = 10 操作时,相当于通过指针 p,对变量 n 进行赋值操作。
所以,对于指针 p,所谓“指向”操作,就是通过赋值形式完成的。
int* p;
int n;
1) p = n //报错,因为指针只能指向地址,不能指向变量本身
2) p = &n //& 符号用于获得变量地址,然后再指向
3) *p = n //相当于将指针p指向的地址,写入变量n
4) *p = &n //报错,相当于将指针p指向的地址,写入地址,而指针p是整数类型,类型不符,也无法转换。
在C语言中,函数传递值是复制转递的,也就是说,函数内部的操作,不会影响外部变量。但通过指针,则可以改变外部变量。
int add_1(int* n) {
*n = *n + 1;
} int main(void) {
int n = 1;
add_1(&n);
printf("%d", n); // 2
}