一、
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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!