C/C++学习笔记(二)数组、字符

所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量。

        

数组声明和初始化  

          声明数组的语法格式:数据类型 数组名[ 常量表达式 ];

          其中括号是数组的标志,常量表达式规定数组的长度,要获取数组中某个元素的值得语法格式:数组名[下标];

          其中下标是0~(数组长度-1)。

          数组的初始化语法格式:数组类型 数组名[常量表达式]={初始化值1,初始化值2,.........................初始化值n};

int array1[3]={0,1,2};//正确
int array2[4]={0,1,2};//正确,第四个没有初始化的值为不确定值
int array3[ ]={0,1,2};//正确,可以省略数组大小,系统会自动计算出来

int array4[3]={0,,2};//不能跳过
int array5[3]={0,1,};//不能跳过
int array6[3]={0,1,2,4};//不能超越界限

另外还可以如下初始化

	int array0[2];
	//array0={0,1};//报错
	for (int i = 0; i < 2; i++)
	{
		array0[i]=i;
	}
	for (int i = 0; i < 2; i++)
	{
		cout<<array0[i]<<endl;//取出数组中的元素
	}


数组在内存中是由若干个相邻的数组元素按顺序拼接而成的,每个数组元素又是相当于是某数据类型的变量,所以每个数组元素所占的内存空间有他的数据类型决定。在C++中有一个sizeof操作符,可以求出一个数组或一种数据类型在内存中的空间大小,它的用法格式是:sizeof(数组名或数据类型);

int array[]={0,1,2,3,4};
int size=sizeof(array)/sizeof(int);

上面的代码可以算出数组的长度,就是它的元素数,在java中用一个.length;就可以搞定的。

 

字符char

很多人一直都搞不明白字符到底是个啥,字符就是8位二进制表示一个字符的ASCII码,例如‘0’就是48,二进制就是00110000,'A'就是65,二进制就是01000001,'a'就是65+32=97,二进制就是01011111,这也是char和int可以相互转化的原因,运行下面代码你会恍然大悟

void showChar();
void showChar(){
	char c;
	for (int i = 0; i < 255; i++)
	{
		cout<<i<<"->";
		c=i;
		cout<<c<<" - ";
		if(i%10==9){
		cout<<endl;
		}
	}
}

运行结果如下图

 

字符数组

'a'和"a"的区别就是前者是字符,后者是字符串,外表特征是字符用单引号,字符串用双引号;内部特征是字符串必然有一个结尾符'\0',所以字符串"a"是由'a'和'\0'两个字符组成的。所以运行下面代码你会再一次大彻大悟:

char carray[]={'\0','a','A','0'};
cout<<carray[0]<<endl;

 for (int i = 0; i < 4; i++)
 {
  int show=carray[i];
  cout<<show <<endl;
 }

运行结果是:空      0      97      65    48
所以说'\0'是转义字符,字符串的结尾,他不显示,就类似于'\n'也是转义字符,是换行的意思。

现在开始说字符数组的事情,字符数组有两种初始化方式,一种是用字符,另一种自然就是字符串了。

	char tarr0[]={"hello"};//字符串初始化
	char tarr1[]={'h','e','l','l','o','\0'};//字符初始化
	char tarr2[]={'h','e','l','l','o'};//字符初始化,没有结尾符
	cout<<tarr0<<endl;
	cout<<tarr1<<endl;
	cout<<tarr2<<endl;//没有结尾符,打印出乱码


向函数传递数组

上一篇博文说过对于基本数据类型来说,参数的传递是将实参的值赋给形参。然而对于数组这种数据类型来说,却是例外的,数组作为形参传递给函数的只是数组首元素的地址,函数在需要用到后面的元素时再按照这个地址和数组下标去查找。也就是说后面的元素根本没有到函数里去,所以函数里求不出数组的大小,只能在函数外计算。由于数组传给函数的是地址,所以这就是前面博文中的“引用”的特殊案例,在函数中对数组的修改会影响到实参:

// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

void sort(int a[],int size);
void sort(int a[],int size){
	for (int i = 0; i < size; i++)
	{
		int min=a[i],minj=i;
		for (int j = i; j < size; j++)
		{
			if(min>a[j]){
				min=a[j];
				minj=j;
			}
		}
		int tmp=a[i];
		a[i]=a[minj];
		a[minj]=tmp;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	int array[]={14,2,6,22,8,0,10,8};
	int size=sizeof(array)/sizeof(int);
	for (int i = 0; i < size; i++)
	{
		cout<<array[i]<<endl;
	}

	sort(array,size);

	for (int i = 0; i < size; i++)
	{
		cout<<array[i]<<endl;
	}

	getchar();
	return 0;
}



二维数组

二维数组与是由一维数组组成,二维数组比一位数多一个下标:

int array[2][2]=

{

         { 0,    1  },

         { 2,    3  }

}

初始化方式如下

int arr0[3][2]={1,2,3};
int arr0[][2]={1,2,3};
int arr0[3][2]={{1},{1,2},{2,3}};

需要注意的是二维数组声明时第一个中括号里是行数,第二个值是列数,其中行数可以省略,列数不可以省略。



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值