您的位置:首页 > 其它

c语多级指针

2017-08-07 11:28 218 查看
指针用途:

1、使程序简洁、紧凑、高效

2、内存的动态分配

3、内存地址的直接处理

4、函数调用时批量参数的传递

5、复杂数据结构的简洁表达等许多其它数据类型难以实现的复杂操作

等等……

一、 多级指针

1、为什么需要使用二级指针

------使用二级指针是为了函数调用结束可以使作为函数实参的指针的值的改变保留下来

------数据结构链表和二叉树当中经常用到二级指针

2、const?

char const *p; // 所有数据不可更改,也就是说*p是常量字符串

char *const p; // 指针变量是不可更改,也就说指针只能指向一个地址,不能更改为其它地址

char const*const p; // 内容和指针都不能更改

const char* const p; // 同上,内容和指针不更改

备注:*作为分界线,在*左有const就说明内容不能更改;在*右边就说明指针不能更改;而左边的const和char顺序无关。

3、二级指针

指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量。二级指针又分为为指向指针变量的指针和指向数组的指针。

指向数组的指针:数组与其它变量在使用上有很大的不同,无论是字符型、整型等,或是结构体类型或者指针类型的变量。

设计工程案例:

// 程序名称:指针应用

#include"stdafx.h"

#include<stdio.h>// 声明C语言标准头文件

int_tmain(intargc, _TCHAR* argv[])

{

int a[5] = {10,20,30,40,50}; // 声明普通数组,且初始化

int *sum[5]; // 声明指针数组

// 初始化指针数组

for (int i = 0; i < 5; i++)

{

sum[i] = &a[i]; // sum[0]=&a[0] sum[1]=&a[1].........

}

// 声明二级指针

int **p;

p = sum; // 初始化二级指针

for (int i = 0; i < 5; i++)

printf("%4d",**(p++));

return 0;

}

一、 指针函数和函数指针

1、指针函数

指针函数是指针带指针的函数,即本质是一个函数。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

定义格式

类型名 *函数名(函数参数列表);

其中,后缀运算符括号”()”表示这是一个函数,其前缀运算符星号”*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当我们调用这个函数后,将得到一个“指向返回值的为…的指针(地址),类型名表示函数返回的指针指向的类型。

例如:int *pFun(int ,int); // *号优先级低于(),pFun首先和后面的()结合运算,pFun是一个函数。即:

int *(pFun(int,int));

设计工程案例:

// 程序名称:指针应用

// 统计三位学生的成绩

#include"stdafx.h"

#include<stdio.h>

float *Find(float (*pointer)[4], intn) // 定义指针函数

{

float *pt;

pt = *(pointer + n);

return (pt);

}

int_tmain(intargc, _TCHAR* argv[])

{

staticfloat score[][4] = { {98,65,99,91}, {56,63,19,80}, {88,77,69,100} };

float *Pf;

int i, m;

printf("请输入要查询的编号:");

scanf("%d",&m);

printf("The Score of N0.%d are:",m);

Pf = Find(score, m - 1);

for (int i = 0; i < 4;i++)

printf("%6.2f ",*(Pf+i));

printf("");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: