当前位置: 首页 > news >正文

大型建设网站制作淘宝网现状 网站建设

大型建设网站制作,淘宝网现状 网站建设,口碑营销的优点,温州模板网站建站一、什么是指针 C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。 CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存 中的一个指定数据…

一、什么是指针

C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。
CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存
中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也
就是说:指针是一种保存变量地址的变量。

前面已经提到内存其实就是一组有序字节组成的数组,数组中,每个字节大大小固定,都是 8bit。对这些
连续的字节从 0 开始进行编号,每个字节都有唯一的一个编号,这个编号就是内存地址。示意如下图:
在这里插入图片描述

这是一个 4GB 的内存,可以存放 2^32 个字节的数据。右侧侧的连续的十六进制编号就是内存地址,每个内
存地址对应一个字节的内存空间。而指针变量保存的就是这个编号,也即内存地址。

二、为什么要使用指针

在C语言中,指针的使用非常广泛,因为使用指针往往可以生成更高效、更紧凑的代码。总的来说,使用
指针有如下好处:
1)指针的使用使得不同区域的代码可以轻易的共享内存数据,这样可以使程序更为快速高效;
2)C语言中一些复杂的数据结构往往需要使用指针来构建,如链表、二叉树等;
3)C语言是传值调用,而有些操作传值调用是无法完成的,如通过被调函数修改调用函数的对象,但是这
种操作可以由指针来完成,而且并不违背传值调用。

三、如何声明一个指针

3.1 声明并初始化一个指针

指针其实就是一个变量,指针的声明方式与一般的变量声明方式没太大区别:

int *p; // 声明一个 int 类型的指针 p
char *p // 声明一个 char 类型的指针 p
int *arr[10] // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指向 int
int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
int **p; // 声明一个指针 p ,该指针指向一个 int 类型的指针

指针的声明比普通变量的声明多了一个一元运算符 “”。运算符 “” 是间接寻址或者间接引用运算符。当它
作用于指针时,将访问指针所指向的对象。在上述的声明中: p 是一个指针,保存着一个地址,该地址指
向内存中的一个变量; *p 则会访问这个地址所指向的变量。
声明一个指针变量并不会自动分配任何内存。在对指针进行间接访问之前,指针必须进行初始化:或是使
他指向现有的内存,或者给他动态分配内存,否则我们并不知道指针指向哪儿,这将是一个很严重的问
题,稍后会讨论这个问题。初始化操作如下:

/* 方法1:使指针指向现有的内存 */
int x = 1;
int *p = &x;// 指针 p 被初始化,指向变量 x ,其中取地址符 & 用于产生操作数内存地址/* 方法2:动态分配内存给指针 */
int *p;
p = (int *)malloc(sizeof(int) * 10);// malloc 函数用于动态分配内存
free(p);// free 函数用于释放一块已经分配的内存,常与 malloc 函数一起使用,要使用这两个函数需要头文件 stdlib.h

指针的初始化实际上就是给指针一个合法的地址,让程序能够清楚地知道指针指向哪儿。

3.2 未初始化和非法的指针

如果一个指针没有被初始化,那么程序就不知道它指向哪里。它可能指向一个非法地址,这时,程序会报
错,在 Linux 上,错误类型是 Segmentation fault(core dumped),提醒我们段违例或内存错误。它也可
能指向一个合法地址,实际上,这种情况更严重,你的程序或许能正常运行,但是这个没有被初始化的指
针所指向的那个位置的值将会被修改,而你并无意去修改它。用一个例子简单的演示一下:

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

这个程序可以编译通过,但是运行的话会报错,报错信息如下:
在这里插入图片描述

要想使这个程序运行起来,需要先对指针 p 进行初始化:

#include "stdio.h"
int main()
{int x = 1;int *p = &x;printf("%d\n",*p);*p = 2;printf("%d\n",*p);return 0;
}

这段代码的输出结果如下:
在这里插入图片描述

可以看到,对指针进行初始化后,便可以正常对指针进行赋值了。

3.3 NULL指针

NULL 指针是一个特殊的指针变量,表示不指向任何东西。可以通过给一个指针赋一个零值来生成一个
NULL 指针。

#include "stdio.h"
int main()
{int *p = NULL;printf("p的地址为%p\n",p);return 0;
}
/***************
* 程序输出:
* p的地址为(nil)
***************/

可以看到指针的地址为nil,即空值,也可以理解为0。在大多数的操作系统上,程序不允许访问地址为 0
的内存,因为该内存是为操作系统保留的。但是,内存地址 0 有一个特别重要的意义,它表明改指针不指
向一个可访问的内存位置。

四、指针的运算

C 指针的算术运算只限于两种形式:

1) 指针 + - 整数

可以对指针变量 p 进行 p++、p–、p + i 等操作,所得结果也是一个指针,只是指针所指向的内存地址相比于 p 所指的内存地址前进或者后退了 i 个操作数。比如,0x10000000等是内存地址的十六进制表示(数值是假定的),p 是一个 int 类型的指针,指向内存地址 0x10000008 处。则 p++ 将指向与 p 相邻的下一个内存地址,由于 int 型数据占 4 个字节,因此 p++ 所指的内存地址为 1000000c。其余类推。不过要注意的是,这种运算并不会改变指针变量 p 自身的地址,只是改变了它所指向的地址。

2)指针 - 指针

只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针。两个指针相减的结果的类型是 ptrdiff_t,它是一种有符号整数类型。减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位,而不是以字节为单位)。举个例子:

#include "stdio.h"
int main()
{int a[10] = {1,2,3,4,5,6,7,8,9,0};int sub;int *p1 = &a[2];int *p2 = &a[8];sub = p2-p1;printf("%d\n",sub);// 输出结果为 6sub = p1-p2;printf("%d\n",sub);// 输出结果为 -6return 0;
}
http://www.yayakq.cn/news/363524/

相关文章:

  • 做网站的入什么科目抖音网站开发
  • 开通微信公众号要钱吗seo推广优化收费
  • 写作网站投稿平台长沙百度首页排名
  • 建网站软件最新国外做衣服网站
  • 省级精品课程网站中国最好的猎头公司
  • 南阳网站排名公司wordpress中文字体插件
  • 重庆营销型网站建设宠物商品销售网站开发背景
  • 用手机可以做网站嘛企业查询系统 工商
  • psd数据网站备案期间怎么做网站
  • 甘孜州建设局门户网站给网站添加后台
  • 加强意识形态建设 办好政协网站甘肃系统建站怎么用
  • 咨询聊城做网站进出口网站贸易平台有哪些
  • 山东网站建设的方案室内设计培训班排行榜学校
  • 做网站设计师的感想六安seo曝光行者seo
  • 天津网站优化公司哪家好做网站后台用什么软件
  • 建企业网站行业网小程序登录不上去怎么办
  • 天津怎样做网站推广我为群众办实事实践活动
  • 自己如何搭建网站资料查询网站怎么做
  • 开源程序网站网站wap转换
  • 做网站一月工资美食网站开发的背景
  • 移动商城个人中心哈尔滨关键词优化效果
  • 门户网站案例分析制作一个网站需要哪些步骤
  • 深圳网络营销网站设计专做茶叶的网站
  • 建网站的客户微网站不能分享朋友圈
  • 企业做什么需要有网站wordpress模板如何安装教程视频教程
  • 苏州住房和城乡建设局网站首页百度快照首页
  • 做网站阳泉购物网站创业时是如何做宣传的
  • 企业网站的建设对于网络品牌的塑造作用做石材网站步骤
  • 在线教育网站制作wordpress侧边二级导航菜单
  • 捷克网站后缀曲阜网架公司