c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针
1.指针数组数组指针 引用数组 数组的引用
|
int *a[10] |
指针数组 |
每一个元素都是一个指针 |
|
Int (*a)[10] |
数组指针 |
P指向一个含有10个元素的数组 |
|
Int (&a)[10] |
数组的引用 |
a是一个数组的引用 |
|
Int& a[10] |
引用函数 |
非法 |
数组的引用:1.在程序体中
int a[10];
Int (&p)[10]=a;//引用数组
2.作为参数
#include <iostream>
#include <string>
using namespace std;
int myFun(int (&b)[10]);//其中10不可以省略
int main()
{
cout << "HelloWorld!" << endl;
int a[10]={0};//也可以先只申明指针后赋值,&可有可无
cout<<"the sizeof a is "<<sizeof(a)<<endl;
myFun(a);
return 0;
}
int myFun(int (&b)[10]){其中10不可以省略
cout<<"the sizeof b is "<<sizeof(b)<<endl;
getchar();
return 0;
}
引用数组:
c/c++是不允许引用数组定义的,例如int &a[10]都是非法的。
2.函数指针和指针函数
|
int (*f)(int) |
函数指针 |
P指向一个函数 |
|
int* f(int) |
指针函数 |
该函数返回值是一个指针 |
|
Int& f(int) |
引用函数 |
返回一个整型引用 |
|
… |
…. |
函数的返回类型还有很多 |
函数指针:
int(*p)(string) =&myFun
请看下面的例子:
因为函数本身就是指针,myFun是指针常量p是指针变量,按理说,调用时应该这样写(*p)(x)但是实际上p(x)也可以。这是因为编译器在处理时做了一些工作来简化代码,所以建议用后者。同样道理p=&myFun和p=myFun。但是声明时格式固定不要混淆。
3.变量的地址问题
#include<IOSTREAM>
using namespace std;
int main()
{
int a=0;
int *p=&a;
int &m=a;
cout<<"&a="<<&a<<"\t"<<"a="<<a<<endl;
cout<<"&p="<<&p<<"\t"<<"*p="<<*p<<"\t"<<"p="<<p<<endl;
cout<<"&m="<<&m<<"\t"<<"m="<<m<<endl;
return 0;
}
可以看出指针p存储了a的地址值,而指针p又存储在另外一个地址内;
而引用只是给a起了一个代号.
4.数组的参数传递问题
先看下面的程序:
C语言中如果直接把一个数组传递给函数,函数的形参定义为,比如int b[10],那么b接收到的其实是a[5]的指针,准确的说他只是一个int类型的指针。因为他只是保存了a[5]的首地址,而且c++本就不会检查数组越界。比如函数中输出b[30],照样有值,其实就是相对b地址偏移20个int类型的长度,在该位置的值强制转换为int输出。如图
知道这点那么形参也可以改为这样int *b或int b[]或int b[N],(其中N可以是任意自然数),都能够编译通过且运行效果相同。
待刊增……….
本文查看很多网上的文章,恕不能一一注明,如有差漏,请多指教。
Normal
0
false
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针的更多相关文章
- 我的c++学习(12)指针作为函数参数
◆ 引用调用与指针传值调用C++中函数的参数的基本使用方法是传值.为了弥补单纯传值的不足,以引用作为函数的参数,从逻辑上讲引用是别名,在函数中对参数的操作,就是对实参的操作,而在物理上是传实参的地址. ...
- 数组的引用——用作形参&返回类型时
一.数组的引用 切入:可以将一个变量定义成数组的引用(这个变量和数组的类型要相同) 形式: int odd[5] = {1, 3, 5, 7, 9}; int (&arr)[5] = odd; ...
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C++ 二维数组(双重指针作为函数参数)
本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong ...
- C语言中的声明解析规则——数组,指针与函数
摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...
- 函数指针的返回值是指针数组,数组里放的是int;函数指针的返回值是指针数组,数组里放的是int指针
函数指针的返回值是指针数组,数组里放的是int 函数指针的返回值是指针数组,数组里放的是int指针 #include <stdio.h> #include <stdlib.h> ...
- C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数
返回数组指针的函数 基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. 定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有10个整型元素的数组的引用 和 返回一个含 ...
- [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组
程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...
随机推荐
- Robotlegs框架1.5简介
该框架的1.5版本位于https://github.com/robotlegs/robotlegs-framework/tree/version1,现在已经出了重新架构的2.0版本,所以我决定先研究已 ...
- C++11 图说VS2013下的引用叠加规则和模板参数类型推导规则
背景: 最近在学习C++STL,出于偶然,在C++Reference上看到了vector下的emplace_back函数,不想由此引发了一系列的“探索”,于是就有了现在这篇博文. 前言: ...
- Oracle介绍(初学者必须知道的)
1.为什么学习数据库?(两个概念) 数据库的概念: 数据库是按照数据结构组织,存储和管理数据的仓库. 数据库,简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增. ...
- "旋转的风车"----windows(GDI)绘图
这正是秋季将尽, 冬季未到的时节. 黄土高坡上已滚起了漫天黄沙, 而这里却是万里晴空如练! 风, 丝丝入骨! 未央柳即将枯死的枝条,仍在挣扎. 街道两旁清一色的银杏树叶, 金灿耀眼. 耀的令人感动, ...
- 转{QQ浏览器X5内核问题汇总}
转自https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/ 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它 ...
- struts(三) ---OGNL的学习和理解
OGNL:Object graphic Navgation Language(对象图形的导航语言)
- Python之SQLAlchemy学习
alchemy 英[ˈælkəmi] 美[ˈælkəmi] n. 炼金术; 炼丹术; (改变事物.物质的)魔力(或方法) ; (事物.物质的) 神秘变化; SQLAlchemy是Python中最有名的 ...
- Android API 21 Toolbar Padding
up vote117down votefavorite 44 How do I get rid of the extra padding in the new Toolbar with Android ...
- CSS3 transform对普通元素的N多渲染影响
一.一入transform深似海 一个普普通通的元素,如果应用了CSS3 transform变换,即便这个transform属性值不会改变其任何表面的变化(如scale(1), translate(0 ...
- 网页项目——i家居网站
本文介绍一个网页项目--i家居网站,小妹初来乍到,欢迎大家评论建议O(∩_∩)O~ 详细源代码.各种框架的实现以及素材均已上传百度云,需要的可以下载: 首页展示 用户注册页面 用户登录页面 商家注册页 ...