c/c++整理--引用和指针(4)
来源:互联网 发布:淘宝商品怎么看配料表 编辑:程序博客网 时间:2024/06/07 03:39
一、指针数组和数组指针的区别
解析:
指针数组指用于存放指针的数组,存放同一类型的指针,例:
int *a[10];数组a中存放了10个int*型变量,在栈区分配了10个int*的空间,数组存放10个int型数据的地址。
数组指针指指向一个数组的指针,例:
int *b = new int[10];指针b指向在堆中分配的10个int型数据大小的内存区,注意,这个时候释放空间一定要delete[],否则会内存泄漏。
二、找错——指针数组和数组指针的使用
#include <stdio.h>int main(){char *str[] = {"Welcome", "to", "Fortemedia", "Nanjing"};char **p = str + 1;str[0] = (*p++) + 2;str[1] = *(p+1);str[2] = p[1] + 3;str[3] = p[0] + (str[2] - str[1]);printf("%s\n", str[0]);printf("%s\n", str[1]);printf("%s\n", str[2]);printf("%s\n", str[3]);return 0;}第六行结束,指针p指向“to”;
第七行结束,str[0]指向“Nanjing”后面的一个元素,但是这个元素不存在,所以str[0]指向NULL,这里要说明一下,*p++中,p++的运算优先于*p,所以p是先自加指向“Fortemedia”,然后加2,指向NULL;
第八行结束,p自身值没有发生变化,str[1]指向“Fortemedia”后的一个元素,即“Nanjing”;
第九行结束,p指向“Fortemedia”,p[1]指向“Nanjing”,p[1]+3即指向“Nanjing”中的第四个元素,str[2]即指向“jing”;
第10行结束,str[2]和str[1]相差三个位置,相减等于3,此时p[0]指向‘j’字符,因此,str[3]即指向‘g’;
这道题我刚开始看的时候陷入了一个误区,怎么想都想不通,最后我将6、7、8、9、10行执行完之后的str都推一下,这样就非常明显了。
推导:
char **p = str + 1; // Welcome, to, Fortemedia, Nanjing P -> to str[1]str[0] = (*p++) + 2; // NULL, to, Fortemedia, Nanjing P -> Fortemedia str[2]str[1] = *(p+1); // NULL, Nanjing, Fortemedia, Nanjing P -> Fortemedia str[2]str[2] = p[1] + 3; // NULL, Nanjing, jing , Nanjing P -> jing str[2]str[3] = p[0] + (str[2] - str[1]); // NULL, Nanjing, jing , g p -> jing str[2]输出:
(空)Nanjingjingg
三、函数指针和指针函数的区别
解析: 指针函数是返回值为指针类型的函数,
返回值类型* 函数名(形参){函数体}事实上,每一个函数,即时它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针,比如函数返回一个整数型,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。
函数指针是指向函数的指针变量,它首先是一个指针变量,其指向了函数地址。
四、数组指针与函数指针的定义
定义下面的几种类型变量:
a、含有10个元素的指针数组
b、数组指针
c、函数指针
d、指向函数的指针数组
a.int* a[10];b.int (*a)[10];c.int (*a)(int,int);d.int (*a[10])(int, int);
五、各种指针的定义
写出函数指针、函数返回指针、const指针、指向const的指针、指向const的const指针。
答案:
void (*a)(int, int);//函数指针void* a(int, int);//函数返回指针char * const a;//const指针char const *a;//指向const的指针char const * const a; //指向const的const指针
六、代码改错——函数指针的使用
#include <iostream>using namespace std;int max(int x, int y){return (x > y ? x : y);}int main(){int *p;int a, b, c;int result;int max(x, y);p = max;cout<<"Please input three integer"<<endl;cin>>a>>b>>c;result = (*p)((*p)(a, b), c);cout<<"result = "<<result<<endl;return 0;}
第15行,声明max函数方法错误。
第17行,等号两边数据类型不同,p为int*类型,max为(int*)(int,int)类型,不能隐式转换。
更改:
int (*p)(int, int);int max(int x, int y);p = &max;
七、看代码写输出——函数指针的使用
#include <stdio.h>int add1(int a1, int b1){return a1+b1;}int add2(int a2, int b2){return a2+b2;}int main(){int numa1 = 1, numb1 = 2;int numa2 = 2, numb2 = 3;int (*op[2])(int a, int b);op[0] = add1;op[1] = add2;printf("%d %d\n", op[0](numa1, numb1), op[1](numa2, numb2));getchar();return 0;}
这里其实很简单,op[2]就是存放了两个函数指针,用于20行输出。
输出:
3 5
八、typedef用于函数指针定义
下面定义有什么作用?typedef int (*pfun)(int x, int y);解析:
定义了一个函数指针,表示其返回值为int类型,且同时带两个int型参数的函数指针类型,可以用这种类型定义函数指针来调用相同类型的函数。
0 0
- c/c++整理--引用和指针(4)
- c/c++整理--引用和指针(1)
- c/c++整理--引用和指针(2)
- c/c++整理--引用和指针(3)
- c/c++整理--引用和指针(5)
- 指针和引用(c++)
- c++:引用和指针
- C和指针 整理
- c/c++易错知识点整理3(引用和指针)(一)
- 指针和引用的区别(C++)
- [C++]指针和引用(一)
- [C++]指针和引用(三)
- [C++]指针和引用(四)
- c指针和c++引用
- c/c++ 引用和指针
- c的指针*和引用&
- [C++]指针和引用(二)
- 【C】指针、引用和数组
- OSI七层模型详解(物理层、数据链路层、网络层、传输层.....应用层协议与硬件)
- HTML的定位方式
- 一位十年北漂人生活感触
- TCP/IP四层模型
- 华为2017实习生招聘笔试题-水仙花数
- c/c++整理--引用和指针(4)
- R语言学习笔记,(1)基础及向量操作
- PTA 5-31 字符串循环左移
- NavigationBar的隐藏与显示
- 强密码检测-用Python自动化无聊的东西-chapter7
- (转)在Eclipse上安装Activiti插件
- CRC32源码
- poj 2155 Matrix (二维树状数组)
- 开发环境的安装和配置