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;}