指针指针

指针指针C 语言是最常使用指针的语言之一,我们在初学 C 语言时可能就会因为指针这个概念而头疼,我在这里将重述指针在 C 语言里的作用及使用过程。尽管其它高级语言中可能并没有明显地使用指针的痕迹,但实际上指针仍然蕴含在那些高级语言的细微之处,可以说涉及到对地址的引用操作离不开指针的概念。指针的定义在计算机科学中,指针(英语:Pointer),是编程语言中的一类数据类型及其对象或变量,用来表示或存储一个存储器地址,这个地址的值直接指向(points to)存在该地址的对象的值。 ——维基百科在1
摘要由CSDN通过智能技术生成

指针指针

C 语言是最常使用指针的语言之一,我们在初学 C 语言时可能就会因为指针这个概念而头疼,我在这里将重述指针在 C 语言里的作用及使用过程。

尽管其它高级语言中可能并没有明显地使用指针的痕迹,但实际上指针仍然蕴含在那些高级语言的细微之处,可以说涉及到对地址的引用操作离不开指针的概念。

指针的定义

在计算机科学中,指针(英语:Pointer),是编程语言中的一类数据类型及其对象或变量,用来表示或存储一个存储器地址,这个地址的值直接指向(points to)存在该地址的对象的值。 ——维基百科

在1964年,哈罗德·劳森发明了最早的指针。他在PL/I中实现出了这个概念,其他高级编程语言也很快跟进,使用了这个想法。

如果想要理解指针的概念,我们就不能不去观察它的使用过程。

首先我们需要回忆下我们学习 C 语言指针时的痛苦记忆,我在此提出以下几个一堆问题:

当我们在 C 语言中使用指针时,我们究竟在使用什么?操作指针意味着什么?为什么为指针变量进行赋值时,有时被赋值的变量前需要加&?加&与不加&的区别在哪里?为什么使用scanf()为变量进行输入时,需要在变量前加&,而printf()则不需要呢?

借着解答这些问题的过程我们来深刻理解指针的操作。

scanf() 函数对变量输入需要 &

当我们需要对变量使用scanf进行输入时,例:

#include<stdio.h>
int main(){
   
  int a;
  scanf("%d", &a);
  printf("%d", a);
  return 0;
}

变量前需要添加&,这个符号意味着取地址,意味着把a这个变量的地址传入scanf()函数内,之所以需要传入地址,而不是一个普通变量是因为这个scanf()函数它是个函数。

你以为我说了句废话?其实不是的。

让我们回忆下我们刚学到函数时,我们的老师是否有向我们提过,函数的参数传递是值传递或者地址传递,即使没有学过或者忘记了并不要紧,我将再次重述函数的 C 语言函数参数传递知识。

C语言函数参数传递

当我们创建一个自定义的函数,然后为这个函数传递一个变量进去,并且期望自定义函数能够改变这个变量的值时,我们最终会发现这个期望极其容易落空。

#include<stdio.h>
void changValue(int a){
   
  a = 2;
}
int main(){
   
  int a = 1;
  changValue(a);
  printf("%d", a); 
  return 0;
}

a的输出结果实际上还是 1 ,changeValue并不能真的改变a的值。

因为这里新建的changeValue函数对a执行的是值传递,意思是只将a的值传递给函数中新声明的a,这两个实际上并不相等,如果这个世界上存在着和你长相完全一样的人,那他也不会成为你,因为你们有着完全不同的生活经历。

但是我们可以通过传递地址的方式,从源头上改变a的值。

#include <stdio.h>
void changeValue(int *a)
{
   
  *a = 2;
}
int main()
{
   
  int a
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值