C语言之多级指针
来源:互联网 发布:印度gdp超过中国知乎 编辑:程序博客网 时间:2024/05/16 07:40
指针用途:
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;
}
- C语言之多级指针
- c语言之多级指针理解一
- c语言之多级指针理解二
- JNI之C语言多级指针剖析
- c语言之多级指针的应用
- C语言多级指针
- C语言多级指针
- c语言多级指针
- C语言-多级指针
- C语言中的多级指针
- C语言 多级指针应用
- C语言复习 多级指针
- C语言指针学习--多级指针
- C/C++ 之 多级指针
- C语言学习笔记(18多级指针)
- C语言多维数组与多级指针
- C语言多维数组与多级指针
- 17.从零开始学习C语言--多级指针
- 插入排序 二分插入排序
- spring boot使用thymeleaf模板配置和freem
- mysql_connect和mysql_pconnect的区别
- 百练4084:拓扑排序结题报告
- 字符串及相关函数
- C语言之多级指针
- 模块已加载,但对DllRegisterServer的调用失败,错误代码为0x800......的解决办法
- 堆排序
- PHP构造方法和析构函数
- OC中isKindOfClass和isMemberOfClass的区别
- 网页简单的登出功能
- 在ubuntu14.04下openni+opencv+kinectV1的学习三:手势识别
- MIT神经科学教授James DiCarlo谈如何通过人类神经理解神经网络
- sql查询