下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

简单分析C语言的指针

作者:课课家教育     来源: http://www.kokojia.com点击数:625发布时间: 2019-03-05 09:37:18

标签: 编程语言C语言指针

大神带你学编程,欢迎选课

  作为C语言中重要的一环,理解指针是学习C语言的重中之重。那么到底什么是C语言中的指针呢?它的作用又是什么呢?下面课课家笔者简单为大家介绍C语言中的指针概念和作用。

  所谓指针(Pointer),它是编程语言中的一个对象,利用地址它的值直接指向(pointsto)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说地址指向该变量单元。因此我们将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。众所周知,计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,比如int占用4个字节,char占用1个字节。为了正确地访问这些数据,通常会为每个字节都编上号码,而每个字节的编号是唯一的,我们可以通过编号准确地找到某个字节。图1是4G内存中每个字节的编号(以十六进制表示):

简单分析C语言的指针_编程语言_C语言_指针_课课家教育

图1

  我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从0开始依次增加,对于32位环境,程序能够使用的内存为4GB,最小的地址为0,最大的地址为0XFFFFFFFF。

  下面是通过代码输出地址的例子:

  #include <stdio.h>

  int main(){

  int a = 100;

  char str[20] = "www.kokojia.com";

  printf("%#X,%#X\\n",&a,str);

  return 0;

  }

  输出结果:

  0X28FF3C,0X28FF10

  %#X表示以十六进制形式输出,并附带前缀0X。a是一个变量,用来存放整数,需要在前面加&来获得它的地址;str本身就表示字符串的首地址,不需要加&。

  C语言用变量来存储数据,用函数来定义一段可以重复使用的代码,它们最终都要放到内存中才能供CPU使用。

  数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。CPU只能通过地址来取得内存中的代码和数据,程序在执行过程中会告知CPU要执行的代码以及要读写的数据的地址。如果程序不小心出错,或者开发者有意为之,在CPU要写入数据时给它一个代码区域的地址,就会发生内存访问错误。这种内存访问错误会被硬件和操作系统拦截,强制程序崩溃。CPU访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。假设变量a、b、c在内存中的地址分别是0X10000X20000X3000,那么加法运算c=a+b;将会被转换成类似下面的形式:

  0X3000=(0X1000)+(0X2000);

  ()表示取值操作,整个表达式的意思是,取出地址0X1000和0X2000上的值,将它们相加,把相加的结果赋值给地址为0X3000的内存。变量名和函数名让我们在编写代码的过程中可以使用易于阅读和理解的英文字符串,不用直接面对二进制地址。需要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。

  本次简单分析C语言的指针的讲解到此暂告一段落,如果以后有内容补充和修改的话笔者会继续在此补充和修改,同时也欢迎大家对本次的讲解提出建议和补充。最后希望本次的教程对大家学习C语言能起到一定的帮助!

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程