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

广州个性化网站建设xd怎么做网页

广州个性化网站建设,xd怎么做网页,一个网站的首页设计ps,衡水网站优化含义 从根本上看#xff0c;指针是一个值为内存地址的变量#xff08;或数据对象#xff09;。指针变量的值是地址。 要创建指针变量#xff0c;先要声明指针变量的类型 作用 1.实现复杂的数据结构#xff0c;例如数组、链表、队列和堆栈等#xff1b; 2.能方便地表…含义 从根本上看指针是一个值为内存地址的变量或数据对象。指针变量的值是地址。 要创建指针变量先要声明指针变量的类型 作用 1.实现复杂的数据结构例如数组、链表、队列和堆栈等 2.能方便地表示和处理字符串 char s1[20]{a,b,\0},*sp1; sp1s1; //s1和sp1都代表字符串ab 3.实现动态存储分配 对于程序中所包含的大存储量的数据对象一般用预先定义指针变量来表示当实际使用时才临时申请实际的存储空间使用完毕立即释放。 指针变量所占的内存空间与所表示的数据对象的存储空间相比实在是微乎其微因为它只是用来存放对应空间的首地址而不是存放数据本身所以可以节省大量的存储空间提高内存空间的利用率。 4.在函数之间进行数据的双向传递 将形参定义成指针类型对应的实参必须是某个数据对象的地址或首地址也即采用传地址的方式这样就可以实现数据的双向传递了。 类型 指针类型属于非标准类型其取值是所表示的数据对象的内存地址所以其值域是内存地址集。 指针类型用来定义各种类型的指针变量。 类型标识符* 类型标识符是指针类型的基类型也即指针所指向的数据对象的类型。 *作用在各个标识符上表示该标识符所标识的变量是指针变量。 指针类型定义和指针变量声明是同时进行的。 int *a,b; //既定义了整型指针int*又声明了整型指针变量a和整型变量b。 声明指针 类型 * 名称 指针实际上是一个新类型不是整数类型。 指针变量的作用域 指针变量也有全局和局部之分在函数外部声明的指针变量是全局的在函数内部声明的指针变量是局部于该函数的。 指针变量的初始化 可以在定义指针变量的同时给其赋初值指针的初值是某个数据对象的内存地址也使得该指针指向对应的数据对象。 这一过程也称为建立指针。 int i10; int *iptri; //在声明指针变量iptr的同时赋予初值其初值是i的地址。 说明 1.标识符前面的“*”并不是名称的一部分而表示该数据对象的类型为指针类型也即声明该数据对象是指针类型数据对象。 2.指针变量可以和其它变量在同一语句中声明。 double d1,*d2; 3.指针变量只能存放相同基类型数据对象的内存地址话句话说一个指针变量在任何时候都只能指向同一基类型的数据对象。 char*c; int i; ...... ci; //错误因为c只能指向字符串 使用指针在函数间通信 一般而言可以把变量相关的两类信息传递给函数。 1.function1(x) 传递的是x的值 2.function2(x) 传递的是x的地址 如果要计算和处理值那么使用第1种形式的函数调用如果要在被调函数中改变主调函数的变量则使用第2种形式的函数调用。 变量名称、地址和值 通过前面的讨论发现变量的名称、地址和变量的值之间关系密切。 编写程序时可以认为变量有两个属性名称和值还有其他性质如类型暂不讨论。计算机编译和加载程序后认为变量也有两个属性地址和值。地址就是变量在计算机内部的名称。 在许多语言中地址都归计算机管对程序员隐藏。然而在 C 中可以通过运算符访问地址通过*运算符获得地址上的值。例如barn表示变量barn的地址使用函数名即可获得变量的数值。例如printf(%d\n,barn)打印barn的值使用*运算符即可获得储存在地址上的值。如果pbarnbarn;那么*pbarn表示的是储存在barn地址上的值。 简而言之普通变量把值作为基本量把地址作为通过运算符获得的派生量而指针变量把地址作为基本量把值作为通过*运算符获得的派生量。 虽然打印地址可以满足读者好奇心但是这并不是运算符的主要用途。更重要的是使用、*和指针可以操纵地址和地址上的内容如swap3.c630程序程序清单9.15所示。 数组和指针 现在可以更清楚地定义指向int的指针、指向float的指针以及指向其他 数据对象的指针。 指针的值是它所指向对象的地址。地址的表示方式依赖于计算机内部的 669 硬件。许多计算机包括PC和Macintosh都是按字节编址意思是内存中 的每个字节都按顺序编号。这里一个较大对象的地址如double类型的变 量通常是该对象第一个字节的地址。 在指针前面使用*运算符可以得到该指针所指向对象的值。 指针加1指针的值递增它所指向类型的大小以字节为单位。 可以使用指针标识数组的 元素和获得元素的值。从本质上看同一个对象有两种表示法。实际上C 语言标准在描述数组表示法时确实借助了指针。 函数 、数组和指针 只有在函数原型或函数定义头中 才可以用int ar[]代替int * ar。 int *ar形式和int ar[]形式都表示ar是一个指向int的指针。但是int ar[]只 能用于声明形式参数。第2种形式int ar[]提醒读者指针ar指向的不仅仅 一个int类型值还是一个int类型数组的元素。 声明数组形参 因为数组名是该数组首元素的地址作为实际参数的数组名要求形式参 数是一个与之匹配的指针。只有在这种情况下C才会把int ar[]和int * ar解 释成一样。也就是说ar是指向int的指针。由于函数原型可以省略参数名 所以下面4种原型都是等价的 int sum(int *ar, int n); int sum(int *, int); int sum(int ar[], int n); int sum(int [], int); 但是在函数定义中不能省略参数名。下面两种形式的函数定义等价 int sum(int *ar, int n) { // 其他代码已省略 } int sum(int ar[], int n); { //其 他代码已省略 } 可以使用以上提到的任意一种函数原型和函数定义。 使用指针形参 函数要处理数组必须知道何时开始、何时结束。sum()函数使用一个指 针形参标识数组的开始用一个整数形参表明待处理数组的元素个数指针 形参也表明了数组中的数据类型。但是这并不是给函数传递必备信息的唯 一方法。还有一种方法是传递两个指针第1个指针指明数组的开始处与 前面用法相同第2个指针指明数组的结束处。 指针表示法和数组表示法 使用数组表示法让函数处理数组的这一意图更加明显。 指针表示法更接近机器语言因此一些编译器在编译时能生成效率更高的代码。 指针操作 赋值 可以把地址赋给指针。 解引号 * 运算符给出指针指向地址上存储的值 取址 和所有变量一样指针变量也有自己的地址和值。对指针而言 运算符给出指针本身的地址。 指针与整数相加 可以使用运算符把指针与整数相加或整数与指针 相加。无论哪种情况整数都会和指针所指向类型的大小以字节为单位 相乘然后把结果与初始地址相加。如果相加 的结果超出了初始指针指向的数组范围计算结果则是未定义的。除非正好 超过数组末尾第一个位置C保证该指针有效。 递增指针 递增指向数组元素的指针可以让该指针移动至数组的下一个元素。 指针减去一个整数 可以使用-运算符从一个指针中减去一个整数。指针必须是第1个运算对象整数是第二个运算对象。该整数将乘以指针指向类型的大小以字节为单位然后用初始地址减去乘积。如果相减的结果超出了初始指针所指向数组的范围计算结果则是未定义的。除非正好超过数组末尾第一个位置C保证该指针有效。 递减指针 前缀和后缀的递增或递减运算符都可以使用。 指针求差 可以计算两个指针的差值。通常求差的两个指针分别指向同一个数组的不同元素通过计算求出两元素之间的距离。差值的单位与数组类型的单位相同。只要两个指针都指向相同的数组或者其中一个指针指向数组后面的第1个地址C都能保证相减运算有效。如果指向两个不同数组的指针进行求差运算可能会得出一个值或者导致运行时错误。 比较 使用关系运算符可以比较两个指针的值前提是两个指针都指向相同类型的对象。 PS这里的减法有两种。可以用一个指针减去另一个指针。 在递增或递减指针时还要注意一些问题。编译器不会检查指针是否仍指向数组元素。C只能保证指向数组任意元素的指针和指向数组后面的第一个位置的指针有效。但是如果递增或递减一个指针后超出了这个范围则是未定义的。另外可以解引用指向数组任意元素的指针。但是即使指针指向数组后面一个位置是有效的也不能保证可以解引这样的越界指针。 解引用未初始化的指针 千万不要解引用未初始化的指针。 创建一个指针时系统只分配了存储指针本身的内存并未分配存储数据的内存。因此在使用指针之前必须先用已分配的地址初始化它。 指针的基本用法 1.在函数间传递信息。 2.用在处理数组的函数中。 传递值还是传递指针 编写一个处理基本类型如int的函数时要选择是传递int类型的值还是传递指向int的指针。通常都是直接传递数值只有程序需要在函数中改变该数值时才会传递针。对于数组别无选择必须传递指针因为这样做效率高。如果一个函数按值传递数组则必须分配足够的空间来储存原数组的副本然后把原数组所有的数据拷贝至新的数组中。如果把数组的地址传递给函数让函数直接处理原数组则效率要高。 传递地址会导致一些问题。C 通常都按值传递数据因为这样做可以保证数据的完整性。如果函数使用的是原始数据的副本就不会意外修改原始数据。但是处理数组的函数通常都需要使用原始数据因此这样的函数可以修改原数组。 空字符和空指针 从概念上看两者完全不同。空字符或\0是用于标记C字符串末尾的字符其对应字符编码是0。由于其他字符的编码不可能是 0所以不可能是字符串的一部分。 空指针或NULL有一个值该值不会与任何数据的有效地址对应。通常函数使用它返回一个有效地址表示某些特殊情况发生例如遇到文件结尾或未能按预期执行。 空字符是整数类型而空指针是指针类型。两者有时容易混淆的原因是它们都可以用数值0来表示。但是从概念上看两者是不同类型的0。 另外空字符是一个字符占1字节而空指针是一个地址通常占4字节。 指针运算 指针的赋值 1.赋空值NULL 2.赋予某个变量的地址 3.将一个指针变量的值赋予另一指针变量 int grade,*p; pgrade; 指针的加减运算 运算符、-、、-- 一个指针量加上或减去一个整型量n表示地址偏移了n个单位具体向上或向下偏移多少字节取决于其基类型。 例如一个整型指针变量加上4等于原存放的地址值加上8字节而一个双精度型指针加上4等于原存放的地址值加上32字节。 PS参与运算的指针变量必须是已赋值的。 对数组名施加、-运算数组名的初值是数组的首地址也即指向数组的第一个元素数组名i表示指向数组的第i1个元素。 a[i]与*(ai)这两种表示法是等价的都表示a数组的第i1个元素。 指针变量的、--运算 原地址加上一个地址单位基类型的实际字节数 --原地址减去一个地址单位基类型的实际字节数 int *iptr; ...... iptr; //iptriptr1向下移动两个字节 iptr--; //iptriptr-1向上移动两个字节 取地址运算 运算符 作用获取数据对象的内存地址如果是结构数据对象则获取其内存首地址 间接访问 运算符:* 该运算符作用在指针变量上表示访问指针变量所指向的数据对象。 作用 实现对指针所指向的数据对象的间接访问包括引用和赋值等基本运算。 int a,b2,c,*p; ...... pb; scanf(%d,a); ca*p; cab *的说明 1.作为运算符表示乘法 2.作为类型标识符用来定义指针类型出现在数据定义部分 3.作为指针运算符表示间接访问 指针与数组 数组名用来存放数组的内存首地址也是第一个数组元素的内存地址因此数组名是一种特殊的指针变量。 数组名是指向数组元素的指针变量 对于数组a而言数组名a和a中的各个元素的关系如下aa[0];aia[i]。数组元素的下标描述可以用数组名指针的偏移来代替所以可以用指针来间接访问数组元素。 *aa[0],*(ai)a[i] 指针数组 元素的数据类型是指针的数组称为指针数组。 char *name[]{Lin,Ding,Zhan}; 赋初值后name数组的每一个元素的值并不是学生的姓名字符串而是对应字符串的首地址每一个元素的值是一个字符指针该指针指向对应的字符串。 指向指针的指针 对于指针数组而言其数组名是指针而且是指向指针的指针称为二级指针。因此除了描述成指针数组之外还可以描述成**类型。 char*name[]{Lin,Ding,Zhan}; char**pname; ...... pnamename; 执行pnamename后pname可以表示指针数组name也即pname指向name[0],pname指向name[1]......以此类推。 cout(int)arr[i]是输出字符指针字符串地址 coutarr[i]是输出字符指针所指向的字符串。 指针与函数 函数与指针的关系 1.函数的参数是指针类型数据例如数组参数、指针变量参数...... 2.函数返回值类型本身就是指针类型这种函数称为指针函数 3.函数名本身就是指向函数入口地址的指针因此可以声明一种指针数据用来存放函数名这样的指针称为函数指针 函数的指针类型参数 形式 可以定义成指针变量或数组 作用 返回函数对指针的修改实质上是返回函数对指针所指向的数据对象的修改这样可以返回不止一个值同时还可以节省大量的内存空间因此具有很大的灵活性与实用性。 带有指针参数的函数的实现过程 1.在函数的参数表中定义指针类型参数void swap(int *x,int *y) 2.在函数调用时提供相应的变量或数组地址传地址swap(a,b); 3.函数的执行部分对指针形参进行间接访问 使用指针类型参数的副作用 指针类型参数的灵活性体现在它使函数可以访问本函数的局部空间栈空间以外的内存区域这显然破坏了函数的黑盒特性带来以下副作用 1.可读性问题对数据的间接访问比直接访问相对难以理解。 2.重用性问题函数调用依赖于上层函数或整个外部内存空间环境丧失其封装特性黑盒特性所以无法作为公共模块来使用。 3.调试的复杂性问题跟踪错误的区域从函数的局部数据区扩大到整个内存空间不但要跟踪变量 函数指针 程序运行时每个函数都存放在代码区中有一个入口地址称为函数地址函数名就表示该地址。 指向函数地址的指针称为函数指针通过该指针可以调用相应的函数。、 作用调用函数和做函数的参数 声明 类型标识符名(*指针变量名)(参数列表) 用函数指针调用函数 函数指针变量(参数列表) (*函数指针变量名)(参数列表) 函数指针用作函数参数 当函数形参是函数指针时对应的实参必须是函数名 char f2(int(*fp1(int))) ...... f2(f1) 实参是函数名在函数调用时实现函数地址的传递这样可以在被调函数体内通过对函数指针形参的引用来调用另一函数而且对应不同的实参值可以调用不同的函数。 函数指针和指针函数的区别 函数指针是指向函数的指针变量即本质是一个指针变量指针函数是指带指针的函数即本质是一个函数。函数返回类型是某一类型的指针格式为类型标识符*函数名(参数列表) 指针函数 该函数的返回值是一个地址值函数返回值必须用同类型的指针变量来接受也就是说指针函数一定有“函数返回值”而且在主调函数中函数返回值必须赋给同类型的指针变量。 定义类型名*函数名(参数列表) ( )的优先级高于*所以参数名先和参数列表结合再和*结合。
http://www.w-s-a.com/news/558717/

相关文章:

  • 中国电力建设集团网站杭州网站运营
  • 大气网站模板下载效果好的网站建设公
  • 住房和城乡建设部网站打不开重庆市建设工程信息网官网30系统
  • 做美食软件视频网站大数据精准营销策略
  • 网站后台密码错误陕西大型网站建设
  • 网站建站中关键字搜索怎么弄wordpress 后台插件无法访问
  • 做减肥餐的网站网站优化注意事项
  • 做网站做推广有效果吗专门做淘宝优惠券的网站
  • 菜谱网站开发系统ps做网页效果图
  • 徐州品牌网站建设wordpress多重筛选页面
  • 网站改版提示无需改版个人怎么申请微信小程序
  • 电子商务网站建设的简要任务执行书可以注册免费网站
  • 公司网站设计需要什么豪爵铃木摩托车官网
  • 建收费网站合肥地区网站制作
  • 自己做头像网站小网站建设公司
  • 电子商务建设与网站规划wordpress linux安装
  • wordpress新手建站win8网站模版
  • 网站的简单布局孝感 商务 网站建设
  • 湖北手机版建站系统价格优化网站内容
  • 网站后台登录不显示验证码软文发布网站
  • 企业微网站建设方案收费的网站如何免费
  • 平昌县建设局网站中国500强企业有哪些
  • 网站开发制作的流程是什么网页打不开显示不安全怎么办
  • 网络网站开发设计安徽建设工程信息网怎么打不开了
  • 百度网站推广申请深圳公众号制作
  • 百度站长怎么做网站维护中国深圳航空公司官网
  • xampp安装网站模板海南一家天涯社区
  • 网站建设 管理系统开发仿租号网站源码网站开发
  • 怎么自己弄网站免费网站设计用什么软件
  • 网站分几种access做网站数据方法