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. Windows7开通Internet信息服务

      我要开通Windows的Internet Information Service(也就是Internet信息服务,简称IIS),当本地服务器用,因为要在里面安装页面项目.    我参考了这篇文章的 ...

  2. web服务器工作原理

    Web服务器工作原理概述 转载自http://www.importnew.com/15020.html 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它 ...

  3. jQuery验证元素是否为空的两种常用方法

    这篇文章主要介绍了jQuery验证元素是否为空的两种常用方法,实例分析了两种常用的判断为空技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了jQuery验证元素是否为空的两种常用方法.分享给 ...

  4. 解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位

    $(function () { //解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位 var u = navigator.userAgent; var isiOS = !! ...

  5. [hdu1394]Minimum Inversion Number(树状数组)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  6. HDU-4525 威威猫系列故事——吃鸡腿

    题意:给定一个正整数A,告知等比数列的公比为q,为这个序列能否超过一个特定的数K. 解法:该题需要考虑公比的取值,当q=1,q=-1,q=0的特殊性,由于等比数列的增长速度非常快,所以可以for循环扫 ...

  7. [Oracle] SQL*Loader 详细使用教程(3)- 控制文件

    控制文件是SQL*Loader里最重要的文件,它是一个文本文件,用来定义数据文件的位置.数据的格式.以及配置数据加载过程的行为,在sqlldr中以control参数指定控制文件.   在控制文件里配置 ...

  8. python 高级特性

    from http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 set set和dict ...

  9. Error: Cannot find a valid baseurl for repo: base

    解决方法如下(修改dns配置) vi /etc/resolv.conf 在此文件最后加入:nameserver 8.8.8.8 如果没有vi编辑器可用: echo "nameserver 8 ...

  10. fsimage 和 edits log

    standby NN每隔一段时间(由参数dfs.ha.tail-edits.period决定,默认是60s)去检查Journal node上新的Edits log文件. standby NN每隔一段时 ...