请二维数组只写一个下标的值作为另一个二维数组只写一个下标的下标索引,得到的值怎么不对,从结果看也不是逻辑索引数组?


选择擅长的领域继续答题?{@each tagList as item}
${item.tagName}
{@/each}手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?手机回答更方便,互动更有趣,下载APP
展开全部
1.数组类的实现中有内置的自我意识首先它知道自己的大小2.数组类支持数组之间的赋值以及两个数组之间的相等和不相等的比较操作3.数组类应该支持对其所含的值进行下列查询操作数组中最小值是什么最大值是什么某个特殊的值是否在数组中如果存在它占的第一个位置的索引是什么4.数组类支持自排序为了便于讨论假定存在一群用户他们认为数组支持排序的功能很重要而另外一些人对此却不以为然除了支持数组操作还必须支持数组本身的机制包括5.能够指定长度以此来创建数组这个值无需在编译时刻知道
6.能够用一组值初始化数组7.能够通过一个索引来访问数组中的单个元素为便于讨论假设用户强烈要求用数组下标操作符来实现这项功能8.能够截获并指出错误的索引值假设我们认为这很有必要所以没有询问用户的想法我们认为这是一个设计良好的数组所必须实现的*/#include<iostream>#include<string>using namespace std;//构建数组类IntArrayclass IntArray{private:int *ia;int _size;public:IntArray(int sz){_size=sz;ia=new int[_size];for(int n=0;n<_size;n++){ia[n]=0;}}// 深拷贝IntArray(const IntArray &c){_size=c._size;ia=new int[_size];for(int i=0;i<c._size;i++){ia[i]=c.ia[i];}}~IntArray(){delete [] ia;}bool operator==( const IntArray& ) const;bool operator!=( const IntArray& ) const;// 赋值操作符 #2aIntArray & operator=( const IntArray& );//int size() const; // #1//void sort(); // #4//int min() const; // #3a//int max() const; // #3b// 如值在数组中找到// 返回第一次出现的索引// 否则返回-1int find( int value ) const; // #3cint operator [](int i);void set();};//‘[]’的重载,用于输出数组元素int IntArray::operator [](int i){return this->ia[i];}//用于向数组中硬性赋值void IntArray::set(){int num=0;for(int p=0;p<this->_size;p++){cout<<"请输入数据"<<endl;cin>>num;this->ia[p]=num;}}//‘==’的重载 两个数组对象相等bool IntArray::operator==(const IntArray &c)const{for(int k=0;k<this->_size;k++){
if(this->ia[k]!=c.ia[k]){return false;}
}return true;}//‘!=’两个数组对象不等bool IntArray::operator!=(const IntArray &c)const{for(int m=0;m<this->_size;m++){if(this->ia[m]!=c.ia[m])return true;break;}return false;}//'='赋值符的重载,用于数组间的赋值IntArray & IntArray::operator=(const IntArray &c){for(int j=0;j<this->_size;j++){this->ia[j]=c.ia[j];}return *this;}//找出函数参数所指位置的数int IntArray::find(int value)const{return this->ia[value];}void main(){IntArray array1(10);//构造函数设定初值,其实也属于硬性赋值IntArray array2(10);
array1.set();//开始对两个整形数组硬性赋值array2.set();if(array1==array2){cout<<"两数组相等"<<endl;}else{cout<<"两数组不相等"<<endl;}cout<<"数组元素的值:"<<array1.find(3)<<endl;array1=array2;//数组之间赋值,正常的数组间是不可以相互赋值的,但是‘=’进行了重载,效果就不同了for(int q=0;q<10;q++){cout<<array1[q]<<endl;//这里,对[]的重载起了作用,其能将赋值后的数组输出}}
已赞过已踩过<
你对这个回答的评价是?评论
收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别
色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。
说明
做任务开宝箱
累计完成
0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...
}
今天写一个程序的时候,用到多维数组,但是有些数据会出错。
很奇怪,就写了个测试程序,发现原来数组的引用出了问题。所以输出不对。
测试程序如下。
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
int main()
{
char size[3][12]={
{'6','6','6','6','7','7','7','7','7','7','7','7'},
//首先声明一个测试数组,二维数组。
{'1','5','3','7',' ','1','1','3','1','5','3','7'},
{'2','8','4','8',' ','8','4','8','2','8','4','8'},
};
printf("size[0][0]=%c\n",size[0][0]);
printf("size[0][11]=%c\n",size[0][11]);
printf("size[0][12]=%c\n",size[0][12]);
//输出1,会被当成第一行,第13个元素,因为第一行只有12个,所有从第二行第一个被输出。
printf("size[0][13]=%c\n",size[0][13]);
//输出5。被当成第二行,第二个
printf("size[1][12]=%c\n",size[1][12]);
//输出2。。被当成第三行第一个
printf("size[2][12]=%c\n",size[2][12]);
}
测试结果如下图
![Center][]
由此可知,对于一个行有12的数组,下标是从0-11的。但是即使引用数组的下标超过数组行数,编译器并没有检查出错误。仍然编译完成。。
size\[0\]\[0\]到size\[0\]\[11\]正常输出。
size\[0\]\[12\]会被当成下一行来输出。
而最后一行size\[2\]\[12\]由于没有声明,所以为空。什么也没有输出。
其实为什么会这样呢?
我们知道内存中数据的分配根据数据声明顺序,类型,是依次排列的。在内存中并没有行列之分,所以当编译器没有检查出错误的时候,会按照排列输出。
我再做一个测试。
声明两个变量,类型为char.
一个初始化为NULL ,一个无初始化。
char size3=NULL;
char size4;
printf("size3=%c\n",size3);
printf("size4=%c\n",size4);
![Center 1][]
输出都为空。
为什么会这样呢?
我们知道数组在内存的地址分配是依次排列的,所以在我们概念里的行,列,在内存中是不存在的。
所以编译器没有检查出错的时候,数组的值会依次输出。这是我的猜测。
我们可以做个测试,取地址,取出size\[1\]\[0\]的地址,与size\[0\]\[12\]的地址,看看是不是一样,就可以知道了。
说干就干。
例程如下。
printf("size[0][12]的地址是:%p \n",&size[0][12]);
printf("size[1][0]的地址是:%p \n",&size[1][0]);
测试结果如下
![Center 2][]
由此可见,地址完全一样。可以验证我的猜想。
所以编译器检查不出错误,我们在使用数组的时候一定要小心谨慎下标。不然容易出错。
[Center]: /images/20220731/1e90aef7ad014908895aa3dc2fdddad9.png
[Center 1]: /images/20220731/4160c2c7f9f34d70830739ce2028126d.png
[Center 2]: /images/20220731/b0a46d526ecd4632bbd1e8b8a2e1f0b9.png}

我要回帖

更多关于 二维数组只写一个下标 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信