指针07 – 零基础入门学习C语言47

第八章:指针07

让编程改变世界

Change the world by program

对使用字符指针变量和字符数组的讨论

虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈……

主要概括起来有以下几点:

  1. 字符数组由若干个元素组成,每个元素中 放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。
  2. 赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。

char str[20];

str = ″I love Fishc.com!″;

而对字符指针变量,可以采用下面方法赋值:

char *a;

a = ″I love Fishc.com!″;

但注意赋给a的不是字符,而是字符串第一个元素的地址。

  1. 对字符指针变量赋初值:

char *a = ″I love Fishc.com!″;

等价于

char *a;

a = ″I love Fishc.com!″;

而对数组的初始化:

char str[20] = {″I love Fishc.com!″};

不能等价于

char str[20];

str[] = ″I love Fishc.com!″;

  1. 如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。

而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址也就是说,该指针变量可以指向一个字符型数据。

但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。

我们举个例子来说明

如:

char str[10];

scanf(“%s”, str);

以上是完全可以的!

而常有人用下面的方法,目的是想输入一个字符串,虽然一般也能运行,但这种方法是危险的 :

char *a;

scanf(“%s”, a);

  1. 指针变量的值是可以改变的,如:

改变指针变量的值

include

void main()

{

    char *a = "I love Fishc.com!";

    printf("%sn", a);

    a += 7;

    printf("%sn", a);

}

另外需要说明的是,若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。

下标形式引用指针变量

include

void main()

{

    char *a = "I love Fishc.com!";

    int i;

    printf("The sixth character is %cnn", a[5]);

    for( i=0; a != '?'; i++ )

    {

        printf("%c", a);

    }

    printf("n");

}

指向函数的指针

用函数指针变量调用函数

可以用指针变量指向整型变量、字符串、数组,也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数的入口地址就称为函数的指针。

指向函数的指针.c (点击下载源代码)

用指向函数的指针作函数参数

函数指针变量常用的用途之一是把指针作为参数传递到其他函数。

前面介绍过,函数的参数可以是变量、指向变量的指针变量、数组名、指向数组的指针变量等。

现在介绍指向函数的指针也可以作为参数,以实现函数地址的传递,这样就能够在被调用的函数中使用实参函数。

宽客网,量化投资,宽客俱乐部

用指向函数的指针作函数参数

它的原理可以简述如下:有一个函数(假设函数名为sub),它有两个形参(x1和x2),定义x1和x2为指向函数的指针变量。

在调用函数sub时,实参为两个函数名f1和f2,给形参传递的是函数f1和f2的地址。这样在函数sub中就可以调用f1和f2函数了。

实战演练

设一个函数process,在调用它的时候,每次实现不同的功能。(有点类似多态)

输入a和b两个数,第一次调用process时找出a和b中大者,第二次找出其中小者,第三次求a与b之和。

源代码:process (点击下载源代码)

视频下载
技术, IT技术, 视频教程, C语言

原文发布于宽客论坛,点击阅读原文

风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击下方“内容举报”进行投诉反馈!
立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部