c语言程序设计第九章指针答案,c语言第7章答案

  c语言程序设计第九章指针答案,c语言第7章答案

  目录

  1.什么是指针?

  1.指针理解的两点:

  2.指针变量

  二、指针类型

  第三,野指针

  1.野生指针的原因

  2.如何避免野指针?

  第四,指针操作

  1.指针整数

  2.指针-指针

  3.指针的关系操作。

  五、二级指针

  不及物动词点阵

  [前言]

  指针可以说是C/C中最难的部分,没有之一!为了更好的解释指针的一些重要内容,笔者还看了几遍录播,才整理出指针的初始阶段。所以,以下是重点。让我们来康康吧。

  一、什么是pointer1。指针理解的两点:

  指针是内存中最小存储单元的编号,也就是地址(指针就是地址);我们通常指的是指针变量,是用来存储内存地址的变量。

  [注意]:存储单元==数字==地址==指针

  同样,指针就是地址。通常,口语中的指针指的是指针变量。

  在内存中:

  内存分为小内存单元,一个基本内存单元的大小是一个字节。

  2.指针变量

  我们可以通过变量取出变量的内存起始地址,并将地址存入一个变量,这个变量就是指针变量。

  #包含stdio.h

  int main()

  {

  int a=10//定义整型变量A,这样会在内存中开辟一个空间

  int * p=a;//*告诉我们p是指针变量,int表示p指向的对象的数据类型是int。

  返回0;

  返回0;

  }

  指针变量,用于存储地址的变量(注意:指针变量中存储的所有值都被视为地址)

  这里的问题是:

  小内存单元有多大?-答案是如何寻址一个字节?

  这里我们主要讨论如何编译:

  对于32位机,假设有32条地址线,每条地址线在寻址时都会产生一个高电平和一个低电平,也就是电信号的1/0。那么由32条地址线产生的地址将是:

  00000000 00000000 00000000 00000000

  00000000 00000000 00000000 00000001

  00000000 00000000 00000000 00000010

  ..

  01111111 11111111 11111111 11111111

  10000000 00000000 00000000 00000000

  10000000 00000000 00000000 00000001

  ..

  11111111 11111111 11111111 11111101

  11111111 11111111 11111111 11111110

  11111111 11111111 11111111 11111111

  这里会有2 ^ 32个地址号,因为一个内存号管理一个字节大小的空间(注意这里指针大小不要和指针管理的空间大小混淆!指针大小在32位平台上是4字节,在64位平台上是8字节,指针是内存单元号,可以管理一个字节的空间。)所以一台32位的机器可以管理2 ^ 32字节的内存空间。以GB为单位,即2 ^ 32 byte==2 ^ 32/1024 KB==2 ^ 32/1024/1024 MB==2 ^ 32/1024/1024 GB==4gb。同样的方法可以计算出,对于64位计算机,可以管理8GB。

  [摘要]

  指针是用来存储地址的,指针是唯一代表一个内存空间的;的指针大小在32位平台上是4字节,在64位平台上是8字节。

  二、指针类型问题介绍:指针类型都是4/8字节,那么不同的指针类型是干什么用的呢?

  回答这个问题,那么这里我们就来说说指针类型的含义(注意,很重要!)

  意思一:

  指针的类型决定了一个指针在解引用时一次可以访问多少字节(也称为指针的权限)。

  Int* —— 4个字节

  Char* —— 1字节

  Double* —— 8 bytes【注意】:需要注意的是,不要和指针类型的大小混淆!

  含义二:

  指针类型决定指针向前或向后移动一步的步长(-整数)。单位是字节!

  第三,野指针

  通配符指针意味着指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)。

  1.野生指针的原因

  指针未初始化;指针越界访问;指针所指的空间已经被释放(特别容易出错)。

  具体解释:

  1指针未初始化。

  比如:int * p;//局部变量指针未初始化,默认值为random,不可取。2指针越界访问

  //最常见的是数组越界访问

  #包含stdio.h

  int main()

  {

  int arr[10]={ 1,2,3,4,5,6,7,8,9,0 };

  int I=0;

  for(I=0;i 12I )//数组越界

  {

  arr[I]=1;

  }

  返回0;

  } 3指针所指的空间已经释放。

  #包含stdio.h

  int* test()

  {

  //局部变量A有生命周期。一旦超出这个范围,就会被销毁,使用内存空间的权限也会被收回。

  int a=100

  返回a;//返回的地址。

  }

  int main()

  {

  int * p=test();

  //指针P用来接收A的地址,但是调用测试函数后,分配给A的内存空间会被收回。

  //此时P接受的地址不正确,导致P成为通配符指针。

  printf(%d\n ,* p);

  返回0;

  }2.如何避免野指针

  初始化指针;小心指针越过边框;指针的空间释放需要立即设置为NULL(即不需要的话指针会设置为NULL);避免返回局部变量的地址(野指针的原因3);在使用之前,您需要检查指针的有效性。

  具体解释:

  1指针初始化

  例如:int * p=NULL//指针的使用需要初始化。如果不知道指针指向谁,可以先初始化为NULL 2。小心指针越界了。

  主要是在数组中,注意数组下标很容易导致越界访问。指针释放的空间需要立即设置为null(也就是说,如果不需要,指针将设置为NULL)。

  #包含stdio.h

  int main()

  {

  int a=10

  int * pa=a;

  //通过指针pa将A的值改为20

  * pa=20

  printf(%d\n ,a);//输出20

  //在//pa完成它的任务后,它不想在整个项目中使用它,所以需要立即将其设置为NULL。

  pa=NULL//在学校教学中可能很少这样写,但是在企业代码规范中要求这样写。

  返回0;

  } 4避免返回局部变量的地址

  #包含stdio.h

  int* test()

  {

  //局部变量A是有生命周期的,所以一旦超出test()函数的作用域,A就会被销毁。

  //也就是说,在定义A的时候,分配给A的内存空间的使用权就不再是A的了,已经被系统收回了。

  int a=100

  返回a;//返回A的地址(测试函数后这个地址不再是A的)

  }

  int main()

  {

  //最初定义指针变量P是为了接收a的地址。

  //但是A调用测试函数后,A的地址被系统收回

  //所以指针P指向的位置是未知的,也是不正确的

  //这是最容易出错的例子!小心点。

  int * p=test();

  printf(%d\n ,* p);

  返回0;

  } 5使用前检查指针的有效性。

  //也用上面的问题,通过指针pa把A的值改成20

  #包含stdio.h

  int main()

  {

  int a=10

  int * pa=a;//此时pa指向A的地址,解引用pa相当于操作A。

  //需要通过解引用指针pa将A的值改为20

  //但是在使用pa之前,最好先判断一下它的有效性。

  //也许你觉得下面这一步有点多余,但是请相信作者,这个习惯在几千行程序中会非常有用。

  //更别说进入企业,以后面对几十万的项目,所以请铁汁现在就养成良好的编程习惯!

  如果(啪!=空)

  {

  * pa=20

  }

  printf(%d\n ,a);

  返回0;

  }四。指针操作1。指针整数

  这里会再次提到指针类型的含义。指针类型2的含义前面提到了:指针类型决定了指针前进或后退一步的步长(-整数),单位是字节。查看内存中的具体操作:

  #包含stdio.h

  int main()

  {

  //定义一个整数数组

  int arr[10]={ 1,2,3,4,5,6,7,8,9,0 };

  返回0;

  }

  #包含stdio.h

  int main()

  {

  //定义字符数组

  char arr[]={a , b , c , \ 0 };

  返回0;

  }

  好了,指针整型就到此为止。下面我们自己下去看看短双指针-integer是什么效果。

  2.指针-指针

  注意,使用指针对指针操作时,前提是两个指针指向同一个内存空间,那么什么是指向同一个内存空间呢?最典型的例子就是数组。

  指针指针实际上表示两个指针中间的元素数量。注意中间没有几个字节。

  指针-指针的练习:自定义函数实现strlen函数的功能。

  #包含stdio.h

  #include assert.h

  int my_strlen(char* arr)

  {

  断言(arr);

  char * end=arr

  while (*end!=\0)

  {

  结束;

  }

  返回end-arr;

  }

  int main()

  {

  char arr[]= ABC ;

  int len=my _ strlen(arr);

  printf(%d\n ,len);

  返回0;

  }3.指针的关系操作

  指针的关系运算,即指针如何比较大小?我们前面说过,指针是地址,所以指针的大小比较的是地址的大小,也就是说比较的是地址的高度。

  这个很简单,这里就不说了。

  五、二级指针

  指针也是一个变量。如果是变量,需要在内存中开辟空间,所以也会有地址,所以指针变量的地址存储在二级指针中。

  不及物动词点阵

  指针数组是一个数组,用来存储指针变量!简单来说就是和整数数组,字符数组等一样。但数组类型不同。

  #包含stdio.h

  int main()

  {

  int a=0;

  int b=0;

  int c=0;

  int * pa=a;

  int * Pb=b;

  int * PC=c;

  //定义指针数组

  int* arr[]={ pa,pb,PC };

  返回0;

  }

  安然无恙。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: