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++ 函数指针 指针函数 数组的引用 指针数组 数组指针的更多相关文章

  1. 我的c++学习(12)指针作为函数参数

    ◆ 引用调用与指针传值调用C++中函数的参数的基本使用方法是传值.为了弥补单纯传值的不足,以引用作为函数的参数,从逻辑上讲引用是别名,在函数中对参数的操作,就是对实参的操作,而在物理上是传实参的地址. ...

  2. 数组的引用——用作形参&返回类型时

    一.数组的引用 切入:可以将一个变量定义成数组的引用(这个变量和数组的类型要相同) 形式: int odd[5] = {1, 3, 5, 7, 9}; int (&arr)[5] = odd; ...

  3. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  4. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  5. C++ 二维数组(双重指针作为函数参数)

    本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong ...

  6. C语言中的声明解析规则——数组,指针与函数

    摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...

  7. 函数指针的返回值是指针数组,数组里放的是int;函数指针的返回值是指针数组,数组里放的是int指针

    函数指针的返回值是指针数组,数组里放的是int 函数指针的返回值是指针数组,数组里放的是int指针 #include <stdio.h> #include <stdlib.h> ...

  8. C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数

    返回数组指针的函数 基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. 定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有10个整型元素的数组的引用  和 返回一个含 ...

  9. [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组

    程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...

随机推荐

  1. tomcat证书配置(来源于http://my.oschina.net/zhxm/blog/161159)

    第一步:为服务器生成证书 1.进入%JAVA_HOME%/bin目录 2.使用keytool为Tomcat生成证书,假定目标机器的域名是“localhost”,keystore文件存放在“D:\tom ...

  2. 我的android学习经历39

    关于像第一次进qq一样的那个渐变企鹅图的制作 渐变动画 package com.moonweather.app.activity; import com.moonweather.app.R; impo ...

  3. GZFramework.DB.Core初始化

    单数据库初始化,以MSSQL为例 public class DBConfig : IDBConfig { public static void InitDB() { GZFramework.DB.Co ...

  4. git 临时记录

    http://blog.csdn.net/wangbole/article/details/8552808 http://blog.csdn.net/gq414047080/article/detai ...

  5. Winform中checklistbox控件的常用方法

    Winform中checklistbox控件的常用方法最近用到checklistbox控件,在使用其过程中,收集了其相关的代码段1.添加项checkedListBox1.Items.Add(" ...

  6. IntelliJ IDEA中使用综合使用Maven和Struts2

    在Intellij IDEA中手动使用Maven创建Web项目并引入Struts2 创建一个新的Maven项目 建好项目之后点击左下角的enable auto import 项目部署 在Moudule ...

  7. CoreText原理及基本使用方法

    关于富文本的排版也是现在的一个技术点,以下是近日关于CoreText的学习记录以及个人理解,希望能对正在学习CoreText的朋友起到帮助. 1.框架坐标系 首先让我们先来看看CoreText坐标系和 ...

  8. iOS9 collectionView新特性

    近日因为系统升级导致xcode6.系列版本出现bug,于是开始使用xcode7.在使用之余突然想到collectionView在iOS9中发布了一个可以移动cell的新特性,就尝试着将其实现,无奈ap ...

  9. charles抓包的使用教程

    // Charles 从入门到精通:(http://blog.csdn.net/donwei8/article/details/51647752) //抓包工具:Charles-断点修改 教程 (ht ...

  10. java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的区别

    java里生成对象有如下两种方式: 1: Object obj = new ClassName(); 直接new一个对象 2: Class clazz = Class.forName(ClassNam ...