vlambda博客
学习文章列表

C语言之画影图形,追捕大盗的指针

指针

指针——画影图形,追捕大盗

  1. 3.     声明变量时未给变量赋初值,那么它们的内容就是随机的。

Eg: int *pa——pa是一个指针变量,它指向一个整型变量

  1. 5.     定义两个相同类型的指针变量:int *pa,*pb

  2. 6.     指针变量的定义只是声明了指针变量的名字和所指向的数据类型,并没有说明指针变量究竟指向哪里。换句话说:“*”只是说明pa是个指针类型的变量,而没有加*的变量“int  pa ”只代表pa 是一个整型变量,仅此而已。

  3. 7.     指针变量未被初始化意味着指针变量的值是一个随机值,不知道它指向哪里,只会像无头苍蝇四处乱撞,最终撞到玻璃上,系统崩溃。所以防止此现象,习惯上在定义指针变量的同时将其初始化为NULL(在头文件中定义为0的宏)

  4. 10.  指针变量只能指向同一基类型的变量,也就是说同为int,才能直想。Eg:定义一个字符型变量c,而定义一个指针变量 int *pa;如果给指针变量赋值的时候,指向c,即pa=&c则是错误的

  5. 13.  输出*pa和输出a 的值是等价的,因此修改*pa 也就相当于修改a的值了。

   #include<stdio.h>

void fun(int *pa); /*注意:要加结束符*/

int main()

{

       int a=1;

       printf("Input a1=%d\n",a);

       fun(&a);

       printf("Input a2=%d\n",a);

       return 0;

}

void fun(int *pa)

{

       printf("Input a3=%d\n",*pa);/*输出形参指向的变量的值*/

       *pa=2;

}

输出:Input a1=1

Input a3=1

Input a2=2

若是不用指针这个小叛徒,可以在被调函数后加一个return语句,让其返回被修改的值,但仅限从函数返回一个值,需要从函数返回多个值时,就不得不用指针了。

  1. 1. #include<stdio.h>

void fun(int *pa);

int main()

{

       int a=1;

       printf("Input a1=%d\n",a);

       printf("Input a2=%d\n",a);

       return 0;

}

void fun(int *pa)

{

       printf("Input a3=%d\n",*pa);/*输出形参指向的变量的值*/

       *pa=2;

}        

2. #include<stdio.h>

void fun(int *pa);

int main()

{

       int a1,b=2;

       printf("Input a1=%d\n",a);

       fun(&b);

       printf("Input a2=%d\n",a);

       return 0;

}

void fun(int *pa)

{

       printf("Input a3=%d\n",*pa);/*输出形参指向的变量的值*/

       *pa=2;

}

  1. 17.  由于指针形参所指向的变量的值在函数调用结束后才能被确定,因此这两个指针形参称为函数的出口函数;而另外的形参称作入口参数。两者的区别在于指针形参可以改变实参的值。其他参数因改变不了,所以一开始就要确定是啥。

  2. 19.  在选择排序是,我们可以在程序中同时列举出两种排序方法,即一种是降序(自定义一个函数,即被调函数),另一种是升序(同上)。然后我们可以在主函数中搞一个菜单,然后随你的心意,选择升序还是降序。下面是这个菜单的代码:

int order;

...

...

printf("Enter 1 to sort in shengxu order,\n");

printf("Enter 2 to sort in jiangxu order:");

scanf("%d",&order);

...

...

if(order==1)

{

       ...shengxu的被调函数

}

else

{

       ...jiangxu的被调函数

}

20.函数形参可实现一个通用的排序函数,既能实现对学生成绩的升序排序,有能实现降序排序。如果只是为了应付期末考试,这个可暂时搁置,考完试后再研究。P245

    若用函数形参,则定义式为:int (*compare)(int a, int b).在解释这个变量声明时,由于圆括号的优先级最高,从左向右结合,所以先解释第一个圆括号里的*。也就是说,这是个指针变量,该指针变量可以指向一个两个整形实参、返回值为整型的函数。即compare是一个函数指针。


参考:《C语言程序设计》第三版 苏小红等编