数组和指针

一、

int *a,b,c;此句中只有a是指针变量,其他为int型变量。如果需要将三者都定义为指针变量,则应该写为:

int *a;

int *b;

int *c;

二、

C++中函数传递方式为3种:按值传递、指针传递、引用传递。

按值传递中,被传递的参数值在函数体内改变时,调用主题的原始数值不会发生改变。例如:

#include<iostream>
#include<cstdlib>
using namespace std;
void te(int y)
{
 cout<<y<<endl;
 y++;
 cout<<y<<endl;
}
void main()
{
 int x=0;
 cout<<x<<endl;
 te(x);
 cout<<x<<endl;
}

显示结果:

0

0

1

0

而指针传递和引用传递则可以修改调用主题中的原始数值。将上例修改为指针传递:

#include<iostream>
#include<cstdlib>
using namespace std;
void te(int *y)
{
 cout<<*y<<endl;
 (*y)++;
 cout<<*y<<endl;
}
void main()
{
 int x=0;
 cout<<x<<endl;
 te(&x);
 cout<<x<<endl;
}

修改为引用传递:

#include<iostream>
#include<cstdlib>
using namespace std;
void te(int &y)
{
 cout<<y<<endl;
 y++;
 cout<<y<<endl;
}
void main()
{
 int x=0;
 cout<<x<<endl;
 te(x);
 cout<<x<<endl;
}

两者输出结果都是:

0

0

1

1

引用传递和指针传递作用一样,区别仅在于清晰性和易读性而已。

三、

C++的引用可以理解为变量的别名。引用不是值,它不占内存空间,声明引用时目标的存储状态不会改变。引用和指针的区别:不存在空引用,引用必须指向某一个对象,而存在空指针;指针应该总是被测试,防止其为空,而引用以前不需要测试其合法性;引用不能像指针一样重新赋值。

另外不能建立引用的数组,引用本身不是数据类型,没有引用的引用,也没有引用的指针。

四、

若定义int b[5]={6,7,8,9,10},而cout<<b[6],则系统可能依然输出一个值。数组b中不存在b[6],但是b[6]位置却存在一个合法值,于是程序输出了结果。若果这个位置上的值比较敏感,后果则可能非常严重。c++是不提供边界检查的。

五、

*p++和*(p++)作用是相同的,因为++和*的优先级相同,且结合方式是从右到左。*(++p)是先对指针加1,再取*p。

如果一个数组为b[M][N],若将其转化为一个一维数组B[M*N],那么原二维数组中的b[m][n]就对应B[(m+1)*(n+1)-1]。

原文链接: https://www.cnblogs.com/loveyuan/archive/2010/10/11/1848352.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    数组和指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/15997

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午4:07
下一篇 2023年2月7日 下午4:07

相关推荐