`
birthdog
  • 浏览: 9518 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

C 语言笔记(3)

c 
阅读更多
接着写,指针与字符串
     C 语言规定,字符串常量是由双引号括起来的字符序列。但是,在 C 语言中没有字符串变量这一个说法。这是因为
在 DOS 模式下,字符串变量的长度可长可短,对应的存储空间需求分配是不可预知的。
  
     对于字符串常量的操作,可以采用字符数组和指针两种形式实现。
     例如:使用字符数组存储字符串 char s[] = "Good midnight! "; 此时,方括号内才数字可以不填写,将在编译时
   由编译系统自动填充为 16。
     由于数组与指向数组的指针变量之间的对应关系,字符串也可以选择指针来处理。
     例如:使用指针变量处理字符串 char *p = "Good midnight! "; 定义 p 为字符指针,并将字符串常量"Good mid
   -night! "赋值给指针变量 p 而不是 *p。
  
   说明:
      a. 字符串输出时,可采用下面的形式: printf("%s",p); 而不能写成 printf("%s",*p); 因为是以 "%s" 的格式
   输出,后面的参数应当代表字符串首地址,可以是字符数组名,也可以是指向字符串的指针;
      b. 当指针指向字符串常量后,不能通过指针变量修改字符串中的某些字符,因为字符串常量存于内存中的的常量
   区,在这一区域的字符不允许被修改;
      c. 字符数组由若干个元素组成,每个元素中存放一个字符,字符指针变量中存放的是地址,而不是将字符串的每
   个字符放到字符指针变量中;
---------------------------------------- 我是分割线 ---------------------------------------------------------
指针与函数
   C 语言程序的基本单位是函数,函数经过编译后,其目标代码在内存中是连续存放的,该代码的首地址即为函数的入口
  地址。函数名本身代表该函数的入口地址,如果使用指针变量来描述,我们称其为函数的指针,它的值等于函数的入口地
  址,通过此指针变量可以实现对该函数的调用。这是我们调用函数的又一方法。在需要大量调用子函数时,我们可以通过
  指向函数的指针来快速调用。

  A. 指向函数的指针变量的定义与引用
    指向函数的指针变量(函数指针变量)定义形式为:
          类型( * 指针变量名)();
    e.g.  int (*p)();  表示 p 被定义为指向一个返回值是整型量的函数。
    说明:
      a. 类型可以是基本类型或所定义的其他类型;
      b. 以上说明中,第一对圆括号是必需的,如果去掉,就成为 int *p(); 按照运算符的优先级,p 首先是一个函数,
         它的返回值是指针类型。所以编译程序把这个定义解释为: p 是一个返回值为指向整型量指针的函数,这完全是
         另一种情况了;
      c. 指向函数的指针变量不能进行算术运算、关系运算。每个函数不同,它们的指令所占用的空间也不一样,若进行
         相加时,放大因子和定位函数尾都是无法确定的;
      d. 让一个指向函数的指针变量指向某一函数,只需将函数的函数名赋值给该指针变量,而不要带上相应的函数参数,
         也不需要带括号。

  B. 指向函数的指针变量作为函数参数
    指向函数的指针变量作为参数传递到其他函数,是函数指针的重要用途。由于函数名代表函数的入口地址,一个函数
   在编译时系统就为其分配了一个入口地址,这个入口地址就称为函数的指针。

  C. 返回指针值的函数
     一个函数可以返回一个 int 型、 float 型、char 型的数据,也可以返回一个指针类型的数据。返回指针值的函数
   (简称指针函数)的定义格式如下:
          函数类型  * 函数名([形参表])
          { 函数体 }
      例如定义: int *min(int x, int y)
                 {  ...   }
     说明:
        a. 在函数名的两侧分别是函数运算符() 和指针运算符 * ,但由于 ( ) 的优先级高于 * ,因为函数名先与()
           结合成一个函数,再与 * 结合成返回指针值的函数,即返回的是一个地址值;
        b. 用法上,返回指针值函数与其他类型返回值一样,例如通过函数名调用等。要注意的是在 return 语句中,返
           回的必须是一个地址值。而且类型必须与声明的返回值类型一致。

附件:跨一步就成功_刘墉.扫描版_.pdf

[/size]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics