如果你发现特殊情况太多,那你肯定是用错方法了。 —— Carig Zerouni文章目录
- 指向指针的指针
- 指针变量作为函数参数
- 六返回指针值的函数
- 指针数组作main函数的参数
- 总结
一个指针变量可以指向整型变量、实型变量、字符类型变量,当然也可以指向指针类型变量。当这种指针变量用于指向指针类型变量时,则称之为指向指针的指针变量,一般定义如下:
类型标识符 **指针变量名
例如:
int **p;
其含义就是定义一个指针变量p,它指向另一个指针变量,该指针变量又指向一个基本整型变量。这里要提一句,指针运算符“ * ”是自右至左结合的,所以上述定义相当于:
int *(*p);
我们这里来看一个例题,用指向指针的指针变量输出12个月:
#includeint main() { int i = 0; char** p; char* month[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; for (i = 0; i < 12; i++) { p = month + i; printf("%sn", *p); } return 0; }
运行结果:
通过前面的介绍,我们知道整型变量、实型变量、字符串变量、数组名等都可以作为函数参数。除此之外,指针型变量也可以作为函数参数。
我们下面来看一个交换两个变量值的例子:
#includevoid Swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int main() { int x = 0; int y = 0; printf("请输入两个数字: n"); scanf("%d %d", &x, &y); int* p1 = &x; int* p2 = &y; Swap(p1, p2); printf("x = %d y = %d", x, y); return 0; }
运行结果:
在上述代码中,Swap是我们自定义的函数,再main函数中调用该函数交换变量a和b的值,Swap函数的两个形参传入了两个地址值,即传入了两个指针变量。我们在Swap内部引入了中间变量tmp,将两个指针变量所指向的数值进行转换。这就是指针变量作为函数参数的使用方法。
指针变量也可以指向一个函数。函数在编译时会被分配一个入口地址,也就是函数的指针。我们可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
一个函数可以带回一个整型值,字符值等等,也可以带回指针型的数据,也就是地址。返回指针值的函数简称为指针函数,定义指针函数一般形式如下:
类型名 *函数名(参数表列);
例如:
int *Mvp(int x, int y)
其中Mvp是函数名,调用它以后可以得到一个指向整型数据的指针。x和y就hi函数的形式参数了,均为基本整型。函数的函数名前有一个“ * ”,说明此函数是指针型函数。
指针数组作main函数的参数我们在前面的程序几乎都会出现main函数。main函数被我们称为主函数,是运行所有程序的入口。main函数是由系统调用的,当处于操作命令状态下,输入main所在的文件名,系统即调用main函数,在前面的内容中,对main函数始终作为主调函数进行处理,也就是允许main调用其他函数并传递参数。
我们来看看main函数带参的形式:
main(int a, char* arr[])
从函数参数的形式上来看,包含一个整型和一个指针数组。
总结指针这一部分我们介绍了指针的相关概念及其用法。我们首先要理解变量与指针之间的区别,重点掌握指点变量的相关概念及其用法。其中使用指针变量作为函数参数在编写程序过程中用的比较多,希望大家能够多多注意。



