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;
}
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;
}
相关文章推荐
- leetcode 500. Keyboard Row(C语言,判断单词是否在键盘同一行,多级指针)22
- c/c语言多级指针的申请和释放
- 指针之——一级二级多级指针
- c语言多级指针
- c深入剖析跨函数调用指针(多级指针)问题
- 多级指针
- C语言多级指针的地址和所指向内存块的地址的理解
- 多级指针和链表
- c语言多级指针用malloc申请内存,释放报错,为什么会这样捏???????
- 4-18-2-二级多级指针、指针与数组、多线程并行计算、多线程队列、字符串拷贝
- C语言复习 多级指针
- 多级指针简析
- 多级指针
- [转] C语言多维数组与多级指针
- C语言多级指针的应用
- 图文详解c/c++中的多级指针与多维数组
- C语言多级指针
- 浅谈使用C++多级指针存储海量qq号和密码
- 深入理解C指针学习笔记---多级指针的内存分配问题(五)
- C语言复习 多级指针