c语言指针用法详解,c++语言指针

  c语言指针用法详解,c++语言指针

  Yyds干货库存

  什么是指针和指针类型?通配符指针指针操作指针和数组二级指针指针数组

  一、指针是什么?

  指针是编程语言中的一个对象。通过使用地址,它的值直接指向计算机内存中另一个地方的值。地址叫指针,就是他寻址的内存单元可以通过它找到。

  注意:内存单元的编号,内存单元的地址和指针是一回事。

  指针地址也是一个变量,一个用来存储地址的变量。

  一个内存单元的大小是一个字节,给它一个数,就是地址。

  int main()

  {

  int a=10//a占用4个字节

  int * pa=a;//获取的第一个字节的地址。

  //pa只是一个指针变量。

  * pa=20

  }注意:指针大小在32位平台上是4字节,在64位平台上是8字节。

  二。指针和指针类型

  1.指针大小

  #包含stdio.h

  int main()

  {

  char * pa

  短* pc

  float * pe

  printf(%d\n ,sizeof(pa));

  printf(%d\n ,sizeof(PC));

  printf(%d\n ,sizeof(PE));

  返回0;

  }

  //4 4 4注意:不管是什么类型的变量,大小在32位平台上是4字节,在64位平台上是8字节。

  2.指针类型的含义

  (1)指针-整数

  #包含stdio.h

  int main()

  {

  int a=0x11223344

  int * pa=a;//在内存中:44332211

  * pa=0;//调试检查内存后,在内存中变成0000000。

  //char * pa=a;

  //* pa=0;//调试检查内存后,可以看到在内存中变成00332211,后面没有变成0。

  返回0;

  }

  //可以看出,指针类型不同,影响也不同。

  可以看出,P和p 1的地址差是4,而pb和pb 1的地址差是1。

  可以看出,p和p 2的地址差是8,而pb和pb 2的地址差是2。

  总结:不同类型的指针有不同的能力来增加或减少地址。

  走一步能走多远?

  (2)指针的去引用

  下图显示了内存中char*类型的解引用用于分配1个字节的1。

  下图显示了在内存中对int* type的解引用用于分配4个字节的1。

  指针的类型决定了指针有多少解引用的权限(它可以操作多少字节)。

  三。野生指针

  (1)概念:是指指针指向的位置是未知的(随机的、不正确的、没有明确限定的)

  (2)原因:

  1.指针未初始化。

  #包含stdio.h

  int main()

  {

  int * p;//p是局部指针变量。如果局部变量没有初始化,默认情况下它是一个随机值。

  * p=10//不知道访问的地址是不是自己的,导致非法访问内存。

  返回0;

  } 2.指针越界访问

  #包含stdio.h

  int main()

  {

  int arr[10]={ 0 };

  int * p=arr

  int I=0;

  for(I=0;i=10I )//当判断i=10时,会越界,造成越界。

  {

  * p=I;

  p;

  }

  返回0;

  }

  3.指针所指的空间被释放。

  #包含stdio.h

  int* test()

  {

  int a=10

  返回a;

  }//返回时,的地址已经返回给操作系统

  //但是程序返回后会记住这个地址,但是它已经不属于我们了。此时,访问是非法的。

  int main()

  {

  int * p=test();//导致出现通配符指针

  * p=20

  返回0;

  }注意:如何避免野指针

  1.指针初始化2。小心指针超出界限3。指针指向要释放的空间,并及时设置NULL。

  4.使用前检查指针的有效性。

  int main()

  {

  //不知道p初始化什么值的时候,直接初始化为NULL

  int * p=NULL

  //c语言本身不会检查数据的越界行为。

  //在使用之前检查指针的有效性

  int *p=NULL

  * p=10//当访问NULL时,这个地址不属于我们

  返回0;

  }

  四。指针操作

  1.指针整数

  #包含stdio.h

  #定义N_VALUES 5

  int main()

  {

  浮点值[N _ VALUES];

  float * vp

  //指针-整数;指针的关系操作

  for(VP=values[0];vp值[N _ VALUES];)//指针的关系运算

  {

  * VP=0;

  }

  返回0;

  }2.指针-指针(获取两个指针之间的元素数量)

  前提:两个指针指向同一个空间

  #包含stdio.h

  int main()

  {

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

  printf(%d\n ,arr[9]-arr[0]);

  //char b[5];

  //printf(%d\n ,arr[9]-b[0]);//这种是不对的。

  //两个指针相减必须指向同一个空间

  }

  //结果:9应用:计算字符串的长度

  #包含stdio.h

  #包含字符串. h

  int my_strlen(char* str)

  {

  char * start=str

  while (*str!=\0)

  {

  str

  }

  返回str-start;//指针指针

  }

  int main()

  {

  int len=my _ strlen( hxdlq );

  printf(%d\n ,len);

  返回0;

  }注意:指针没有意义。

  3.指针的关系操作。

  //与后面相比

  for(VP=VALUES[N _ VALUES];vp值[0];)

  {

  *-VP=0;

  }

  //与以前相比

  for(VP=VALUES[N _ VALUES-1];vp=值[0];vp - ) {

  * VP=0;} C语言中的标准规定数组元素的指针要和后面的比较,不能和前面的比较。

  动词(verb的缩写)指针和数组

  数组名是数组第一个元素的地址。

  不及物动词次级指针

  #包含stdio.h

  int main()

  {

  int a=0;

  int * pa=a;//pa是指针变量,一级指针

  int * * ppa=pa//二级指针,存放指针变量的地址。

  //pa也是一个变量,pa是存储在pa中的地址。

  printf(%d ,* * PPA);

  返回0;

  }七。点阵

  #包含stdio.h

  int main()

  {

  int arr[10];//塑造数组

  char ch[7];//字符数组

  //指针数组3354存储指针数组

  int * parr[5];//形状指针数组

  char * PCH[5];//字符指针数组

  返回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算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: