C语言轻松学习-12

第十二章

任务一:指针的定义和使用

任务二:数组指针(指向一维数组,指向字符串,指向二维数组)

任务三:指针数组

任务四:函数指针

任务五:指向指针的指针的定义和使用

小结

Emmm…最近有点忙(其实比较懒了),拖更了很长时间了,在本章对不学计算机的人可以选择性地学习,若是学计算机的,特别是以后作为程序猿的那么就要认真学习了,因为本章所讲的内容为C语言的核心之一!

好了,那么废话不多说了,直接开始,我们先来了解一下什么是“指针”通俗的说,指针就是根据已知目标的“内存地址”并指向这个“内存地址”所反应出的数值,具体详细可自行“百度百科”,我也不过多的重复了,

我们来用代码定义一个指针,定义指针表达式,int *xxx,char *xxx ,double *xxx,也就是 ”申请变量类型+空格+*+名称 ”,这里的“main()”函数无“return 0;”返回值为“void”(无返回值),这只是另一种写法,与定义指针无关(我刚刚想起来的(#^.^#))

#include<stdio.h>
int main(void)
{
  int *p;
}

好,有可能大家会不习惯这样写“main()”函数,那么我们还是使用原来的“main()”函数吧,定义一个指针,代码如下:

#include<stdio.h>
int main()
{
  int *p;
  return 0;
}

我们发现,定义一个指针与定义一个变量基本类似,就是多了一个“*”(星符号),那么这就是指针的标志性符号了,

OK,我们接下来准备使用指针,代码如下:

我们定义一个指针,指针名为“P”然后又定义了一个整数型变量“a”并将其赋值为“23”

然后我们让 p=&a,这个“&”符号相信大家也知道它的意思了,取地址符号,取目标变量所在的内存地址,

之后我们分别输出,a,a的内存地址,p的值,*p的值

#include<stdio.h>
int main()
{
  int *p,a=23;
  p=&a;
  printf("a=%d,&a=%d,p=%d,*p=%d\n",a,&a,p,*p);
  return 0;
}

上述代码调试截图如下:通过调试截图,我们发现,*p的值与a的数值相等,p的值也与a的地址相等,那么这就是我们的指针了,我们可以这样理解:“*”就是指向的意思,p是a的内存地址,那么*p⇔指向内存地址,返回的是这个内存地址所存放的数值或数据

我们不止可以利用指针进行输出,还可以修改 指针指向的内存地址内,存放的数据,代码如下:

#include<stdio.h>
int main()
{
  int *p,a=23;
  p=&a;
  printf("a=%d,&a=%d,p=%d,*p=%d\n",a,&a,p,*p);
  *p=223;
  printf("a=%d,&a=%d,p=%d,*p=%d\n",a,&a,p,*p);
  return 0;
}

代码调试截图如下:通过调试截图证实,指针是的确可以修改数据的,因为指针是直接接触内存的,而且也具有修改功能,大部分语言已经遗弃指针,因为太危险了,随时都可以修改内存(害怕程序猿不知情的情况下无意间修改了程序重要的内存,进而导致程序崩溃!),目前C/C++是比较靠近下层的语言,还保留着指针这个功能

不要以为指针只是代替了它,指针的作用也是很大的,用于我们后面学习“单链表”所需,将两个数组进行相连,原理就是指针的原理,接下来我给大家画个小草图来帮助理解一下指针的指向过程,

解释一下:这是一块内存,里面存放着各个程序的各种地址,那么我们定义的指针和整数型变量也在其中,因为内存地址所存放的数据不可能为空,必须要有数值,所以其他空位我都随便画了波浪线表示有数值

如果我们要利用指针表示变量a,那么我们首先要获取a当前所在的内存地址,我们获取到地址之后,利用指针的指向原理,我们指向a这个数据所存放的内存地址的位置,那么我们每次调用指针*p其实就是每次它为我们显示出这个内存地址所存放的数据

同样的,我们来试一下字符类型的指针操作,代码如下:

#include<stdio.h>
int main()
{
  int *p;
  char a='A';
  p=&a;
  printf("a=%c,&a=%d,p=%d,*p=%c\n",a,&a,p,*p);
  return 0;
}

代码调试截图如下:我们调试发现,代码报错了,错误信息,不能由char转换为int,那么这里就打破了我们刚刚所理解的指针“*”与“p”的解释了,那么我们按照提示将整数型指针改写为字符型指针,测试一下,代码如下:

#include<stdio.h>
int main()
{
  char *p,a='A';
  p=&a;
  printf("a=%c,&a=%d,p=%d,*p=%c\n",a,&a,p,*p);
  return 0;
}

代码调试截图如下:我们发现,可以正常使用了,那么我们就要重新更新一下我们对指针的看法,必须要类型相对应才可以实现指向这个变量的内存地址

下一页开始学习任务二:数组指针(指向一维数组,指向字符串,指向二维数组)

1 2 3 4 5
分享到:
赞(0)

请选择你看完该文章的感受:

9瞧一瞧 2扯淡 8学到了 1不懂 9正能量 1无聊

评论2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (选填)
  1. #0
    没了吗
    user2021-11-20 9:50:32回复
    • 如果以后不是学C++这门高级语言的话。其实这一章可以不用学了,可以直接学其他高级语言了,
      lla2021-11-20 9:53:56回复