当前位置:首页 > 攻略

【0号元素】电脑期末不知道怎么复习?献上复习总结:指针大战

指针被称为C语言的精华,真正理解和掌握指针是征服C语言的关键!在学习指针之前,我们先弄清了概念。

地址

地址是什么?在内存(注:我们这里提到的内存不是人们常说的计算机的物理内存,而是虚拟逻辑内存空间)中,地址是能够唯一识别一个点的数字,即数字!我们都见过尺子。我们统一以毫米为单位、长度为1000毫米的尺子,其范围为0~999,我们可以准确地找到35毫米、256毫米的位置。

出于同样的原因,内存也像统治者一样线性排列,但这个范围有点大。在我们使用最广泛的32位操作系统中,地址在0~4,294,967,295之间,地址只是其中之一,习惯上,在计算机内,地址是我们经常使用的。(大卫亚设,Northern Exposure(美国电视))C程序中定义的每个变量都在内存中占用内存单元。例如,int类型为4字节,char类型为1字节,依此类推。每个字节在0到4,294,967,295之间有相应的编号。c语言可以在程序中使用变量地址。

# include

Intmain()

{

因蒂;

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

Charb [10]={'c ',' l ',' a ',' n ',' g ',' u ',' a ',' g ',' e '

for(I=0;I10I)

{

Printf ('int address 33600x% x,value 3360% d \ n ',a [I],a[I]);

}

printf(' \ n ');

for(I=0;I10I)

{

Printf ('char address 33600x% x,value 3360% c \ n ',b [I],b[I]);

}

Return0

}

在32位Linux系统上运行参考结果:

Int address 33600 xbfb 949c4,值33601

Int address 33600 xbfb 949c8、value :2

Int address 33600 xbfb 949cc、value :3

Int address 33600 xbfb 949d0、value 33604

Int address 33600 xbfb 949d4、value :5

Int address 33600 xbfb 949d8、value 33606

Int address 33600 xbfb 949dc、value 33607

Int address 33600 xbfb 949e0、value :8

Int address 33600 xbfb 949e4、value :9

Int address 33600 xbfb 949e8、value :0

Char address 33600 xbfb 949f2、value :c

Char address 33600 xbfb 949f3、value :l

Char address 33600 xbfb 949f4、value :a

Char address 33600 xbfb 949f5、value :n

Char address 33600 xbfb 949f6、value :g

Char address 33600 xbfb 949f7、value :u

Char address 33600 xbfb 949f8、value :a

Char address 33600 xbfb 949f9、value :g

Char address 33600 xbfb 949fa,值3360e

Charaddress 33600 XBFB 949FB、VALUE 3360直接在飞机上运行测试并观察分析结果。

指针的定义和使用

理解地址的概念后,指针也不奇怪。简单地说,地址是逻辑内存中的号码,指针是号码和地址。但是两者的性质不同。一个代表常数,另一个是变量。就像记忆是统治者一样,指针是椅子上的光标,可以左右移动。他在某个时间点指向一个地方。这就是指针变量。(大卫亚设)。

为指针变量定义的常用格式为:

类型指示符*变量名;

其中*与前面的类型说明符一起说明这是指针变量。类型说明符表示该指针变量指向的变量的数据类型,变量名是定义的指针变量名。此外,c提供*运算符,以获取地址的相应值。

例如:

# include

Intma

in() {         int num=2014;         int *p=#         printf("num Address = 0x%x,num=%d\n",&num,num);         printf("p = 0x%x,*p=%d\n",p,*p);         printf("%d\n",*&num);         return 0; }

请亲自运行观察结果并思考。
值得一提的是,由于指针存放的都是地址,在32位操作系统下都在0 ~ 4,294,967,295这个数区间内,所以:在32位操作系统下,任何类型的指针变量都占四个字节!

#include<; struct INFO {         int a;         char b;         double c; }; int main() {         int *p;         char *p1;         float *p2;         double *p3;         struct INFO *p4;   //struct INFO类型为结构体类型 我们将会在后面的章节中讲解         void *p5;         printf("int point size is :%d\n",sizeof(p));         printf("char point size is :%d\n",sizeof(p1));         printf("float point size is :%d\n",sizeof(p2));         printf("double point size is :%d\n",sizeof(p3));         printf("struct point size is :%d\n",sizeof(p4));         printf("void point size is :%d\n",sizeof(p5));         return 0; } #上机运行观察结果

数组与指针

前面我们已经知道,通过数组下标可以确定数组元素在数组中的顺序和存储地址。

由于每个数组元素相当于一个变量,因此指针变量可以指向数组中的元素,也就是说可以用指针方式访问数组中的元素。

对一个指向数组元素的指针变量的定义和赋值方法,与指针变量相同。例如:

int a[10]; /*定义 a 为包含 10 个整型数据的数组*/ int *p; /*定义 p 为指向整型变量的指针*/ p=&a[0]; /*把 a[0]元素的地址赋给指针变量 p*/

C 语言规定,数组名代表数组的首地址,也就是第 0 号元素的地址。因此:

p=a; /*等价于 p=&a[0]; */ int *p=a; /*等价于 int *p=&a[0]; */

对于指向首地址的指针 p,p+i(或a+i)就是数组元素 a[i]的地址,*(p+i)( 或*(a+i) )就是 a[i]的值。
如果指针变量 p 已指向数组中的某一个元素,则 p+1 指向同一数组中的下一个元素。


引入指针变量后,就可以用以下两种方法来访问数组元素:

(1)下标法:即用 a[i]形式访问数组元素,在前面介绍数组时都是采用这种方法。

(2)指针法:即采用*(a+i)或*(p+i)形式,用间接访问的方法来访问数组元素,其中 a 是数组名,p 是指向数组的指针变量,其初值 p=a。

#include<; int main() {         int i;         int a[10]={1,2,3,4,5,6,7,8,9,0};         int *p=a;         for(i=0;i<10;i++)         {                 printf("P Value:%d   a Value :%d\n",*(p++),*(a+i));         }         printf("\n");         return 0; }

注意输出的两种方式,指针可以通过++或--并修改自身值的方式移动,然而数组名本身值不可以被更改。


字符串与指针

前面我们已经讨论过字符数组与字符串,字符指针也可以指向一个字符串,可以用字符串常量对字符指针进行初始化。例如:

char *str = "www.do; ;

这是对字符指针进行初始化。此时,字符指针指向一个字符串常量的首地址。
还可以用字符数组来存放字符串,例如:

char string[ ] = "Welcome to do;

在这个语句中,string 是数组名,代表字符数组的首地址。

因此可以通过数组名 string 来访问字符串,字符串指针和字符串数组两种方式都可以访问字符串。

但它们有着本质的区别:字符指针str 是个变量,可以改变str 使它指向不同的字符串, 但不能改变 str 所指向的字符串常量的值。 而string 是一个数组,可以改变数组中保存的内容。应注意字符串指针和字符串数组的区别。

#include<; int main() {         char *str = "www.do;;         char string[]="Welcome to do;;         str[0]='C'; //试图修改str指向的常量区的字符串内容         return 0; }

指针是C语言的精髓所在,需要深入理解的同时可以熟练运用指针在不同场合,当然离不开作业的练习,可以把之前的数组相关的题库用指针来实现。

关于指针讲解的视频部分已上传,需要的伙伴可自行观看~

需要学习资料的伙伴可以私信我领取噢~

1.《【0号元素】电脑期末不知道怎么复习?献上复习总结:指针大战》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【0号元素】电脑期末不知道怎么复习?献上复习总结:指针大战》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2572862.html

上一篇

【卡拉赞攻略】魔兽怀旧服:P4喀喇赞门槛提高,收500克门票吗?两份工作要吃亏

下一篇

【下雨天蚊子不会被雨滴砸死】为什么下雨的时候蚊子不会被雨滴打死?蚂蚁庄园小教室最新答案

【0号元素】墨笔纸 210006 1-20号元素名称和符号

【0号元素】墨笔纸 210006 1-20号元素名称和符号

0号元素相关介绍,...

【0号元素】HashMap扩展后如何重新分配元素?

  • 【0号元素】HashMap扩展后如何重新分配元素?
  • 【0号元素】HashMap扩展后如何重新分配元素?
  • 【0号元素】HashMap扩展后如何重新分配元素?

【0号元素】有“零元素”吗?0号元素到底是什么?

  • 【0号元素】有“零元素”吗?0号元素到底是什么?
  • 【0号元素】有“零元素”吗?0号元素到底是什么?
  • 【0号元素】有“零元素”吗?0号元素到底是什么?

【0号元素】宇宙中仍有0号元素,这又是什么物质?

  • 【0号元素】宇宙中仍有0号元素,这又是什么物质?
  • 【0号元素】宇宙中仍有0号元素,这又是什么物质?
  • 【0号元素】宇宙中仍有0号元素,这又是什么物质?
【0号元素】《缺氧》要素获取方法概述

【0号元素】《缺氧》要素获取方法概述

0号元素相关介绍,在缺氧游戏中,地核附近有一个叫0号元素的岩层,这是极限,是挖不出来的。但是想挖也有办法。今天,主编将为大家带来玩家“摧毁地球炸弹”分享的缺氧0号元素挖掘方法。感兴趣的朋友们快来看看吧! 元素0获取方法...

1到20号元素名称符号图片 1到20号元素符号及图案

1到20号元素名称符号图片 1到20号元素符号及图案

1到20号元素名称符号,简介如下1-20号元素的元素符号和名称:1-10号元素:H氢、He氦、Li锂、Be铍、B硼、C碳、N氮、O氧、F氟、Ne氖;11-20号元素:Na钠、Mg镁、Al铝、S... ...

【0号元素】什么是X射线,它是如何被发现的,对人类有多大影响?

  • 【0号元素】什么是X射线,它是如何被发现的,对人类有多大影响?
  • 【0号元素】什么是X射线,它是如何被发现的,对人类有多大影响?
  • 【0号元素】什么是X射线,它是如何被发现的,对人类有多大影响?
【0号元素】终端卡顿优化的全记录

【0号元素】终端卡顿优化的全记录

0号元素相关介绍,目前手机SOC的性能越来越少,很多程序员在终端程序的开发过程中也不太注意性能方面的优化,尤其是不注意对齐和分支优化,但是这两种问题一旦出现所引发的问题,是非常非常隐蔽难查的,不过好在项目中用到了移动端...