C++课程第一课中出现的问题的探讨
来源:互联网 发布:少林足球 知乎 编辑:程序博客网 时间:2024/06/07 22:53
课程中间出现了一些很重要也比较有意思的问题,教学相长,又让我复习了一遍指针,废话不说,进入正题。
problem 1: 指针数组到底是什么?
指针数组,即存放指针(地址)的数组,数组的每一个元素都是一个指针,语法格式举例,int *p[3]; 在运算符的优先级中,括号的优先级最高(中括号的优先级仅次于小括号),因此,对于int *p[3] ,首先,编译器识别p[3],这代表数组,再识别int *这 代表数据类型是int指针型,在这里,我们换一种写法使之更好理解,其实,我更喜欢这种写法,我们把 int *p[3]写成 int* p[3](int * 和int*是一样的,这里只是为了更好理解!体现c语言书写的自由性);说完了定义,它有什么用呢,主要应用于接收多个字符串。
<span style="font-family:Courier New;">#include <iostream>#include <cstdio>using namespace std;int main(){ char *p[3]={"123","456","789"};//对比char *p="123"思考 cout<<p[0]<<endl; cout<<p[1]<<endl; printf("%s\n",p[2]); return 0;}</span>
problem 2:int *p[3]是指针数组,那int (*p)[3]又是什么鬼?
首先依然是说明,int (*p)[3] 是指向长度为3的数组的指针! 刚才说过了,小括号的优先级最高,因此,编译器先识别(*p)显然,这是一个指针,然后编译器又遇到了[3],显然,这是一个数组,又(*p)在前面,显然,(*p)被理解为数组的更高一维(联系二维数组int a[3][4],a[0],a[1],a[2]是三个长度为4的一维数组)
说了半天,有什么用啊,int (*p)[3]主要用来处理二维数组
<span style="font-family:Courier New;">#include <iostream>#include <cstdio>using namespace std;int main(){ int a[3][4]={{1,1,1,1},{2,2,2,2},{3,3,3,3}}; int (*p)[4];//指向长度为4的数组的指针 for(p=&a[0];p<=&a[2];p++) //或者for(p=a;p<=a+2;p++),二维数组的维的理解还是很重要的 { for(int i=0;i<4;i++) { cout<<(*p)[i]<<" "; } cout<<endl; } return 0;}</span>
problem 3:二重指针又是什么啊?
说明: 二重指针,就是指向指针的指针,写法举例 ,int **p;好吧,该死的维数又来了,让我们从int **p的最右边读起,p是一个二重指针,它只能存储指针变量的地址,*p是一个指针,他只能存储 int 型变量的地址,**p是整型变量。
有什么用呢?int x=1; int *p=&x;int q=&p;cout<<**p<<endl;(为了输出个int 你至于吗?)
<span style="font-family:Courier New;">#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){ char *p[3]={"123","456","789"}; char **q; for(q=&p[0];q<=&p[2];q++) //一重指针遍历普通数组,二重指针遍历指针数组 { cout<<*q<<endl; } return 0;}</span>
problem 4:主函数的参数问题,http://blog.csdn.net/liuzhan214/article/details/49977391 这个我以前写过,如果依然不明白就再看看 char *p[3]的含义
problem 5;指向函数的指针
说明,函数也有入口地址,所以,也有指向函数的指针,这个纯粹语法,看下示例就ok
<span style="font-family:Courier New;">#include <iostream>#include <cstdio>#include <cstring>using namespace std;int Max(int x,int y){ return x>y?x:y;}int Min(int x,int y){ return x<y?x:y;}int main(){ int a=3,b=5; int (*p)(int,int); //定义指向函数的指针变量p,指向的函数的返回值,参数列表必须与之一致 p=Max; cout<<(*p)(a,b)<<endl; p=Min; cout<<(*p)(a,b)<<endl; return 0;}</span>
- C++课程第一课中出现的问题的探讨
- C语言中出现的问题
- 关于课程本质内涵的探讨[节选]
- WPF中打印问题的探讨
- ARM板出现两个箭头的问题探讨
- 关于孙鑫课程第14课网络编程使用VS2013 inet_addr,inet_ntoa出现的问题
- 在一个字符串中找到第一个只出现三次的字符(如accbcabbbdddbb中第一个只出现三次的字符是c)
- 递归问题的探讨
- 马赛克问题的探讨
- c的第一课
- DES 算法 在C++builder中出现的诡异问题
- C和C++混用中出现的问题
- C语言-循环中套用scanf()出现的问题
- [C++]实现--讨论关于实现中可能出现的问题
- 在字符串中找出第一个只出现一次的字符。经典C语言例题
- c::在一个字符串中查找第一个只出现一次的字符
- 【C语言】找出一个字符串中第一个只出现一次的字符
- 【c语言】第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符
- 【LeetCode】.1.Two Sum
- mysql优化-- int类型解析及其优化
- Android View事件机制 21问21答
- 5本最佳的Java面向对象理论和设计模式的书籍
- js时间戳和日期时间格式的互转
- C++课程第一课中出现的问题的探讨
- Github从入门到精髓
- C++ 拷贝构造函数
- C++ 重载输出运算符<<
- hdu 2473(并查集+删除操作)
- Android常见XML转义字符
- 1000行代码写小游戏(六)
- gcc相关编译选项总结
- 【HRS项目】Axure的团队合作