C语言之画影图形,追捕大盗的指针
指针——画影图形,追捕大盗
3. 声明变量时未给变量赋初值,那么它们的内容就是随机的。
Eg: int *pa——pa是一个指针变量,它指向一个整型变量
5. 定义两个相同类型的指针变量:int *pa,*pb
6. 指针变量的定义只是声明了指针变量的名字和所指向的数据类型,并没有说明指针变量究竟指向哪里。换句话说:“*”只是说明pa是个指针类型的变量,而没有加*的变量“int pa ”只代表pa 是一个整型变量,仅此而已。
7. 指针变量未被初始化意味着指针变量的值是一个随机值,不知道它指向哪里,只会像无头苍蝇四处乱撞,最终撞到玻璃上,系统崩溃。所以防止此现象,习惯上在定义指针变量的同时将其初始化为NULL(在头文件中定义为0的宏)
10. 指针变量只能指向同一基类型的变量,也就是说同为int,才能直想。Eg:定义一个字符型变量c,而定义一个指针变量 int *pa;如果给指针变量赋值的时候,指向c,即pa=&c则是错误的
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. #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;
}
17. 由于指针形参所指向的变量的值在函数调用结束后才能被确定,因此这两个指针形参称为函数的出口函数;而另外的形参称作入口参数。两者的区别在于指针形参可以改变实参的值。其他参数因改变不了,所以一开始就要确定是啥。
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语言程序设计》第三版 苏小红等编