数组申明:type arrayname[arrarysize] 如: int student[100]; int student[100][100];
数据初始化:大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果没有写大小,数组的大小则为初始化时元素的个数。如:
int student[3] = {1,2,3}; int student[3] = {0}; //初始化为0 int student[] = {1,2,4}; //没有指定大小,编译器自动分配大小
如何把一个数组的值赋给另一个数组:一个方法就是用循环的方式一个一个赋值,另一个办法就是用 void *memcpy(void *dst, void *src, size_t size); 函数。这个函数的功能为将src上大小为size字节的数据赋值到dst上。如:
1 int a[5]; 2 int b[5]; 3 memeopy(a,b,sizeof(b)); //把b的值赋给a
数组作为参数:当数组作为一个函数的参数传递时,数组类型自动转换为指针类型,因此传的实际是地址。
1 #include <iostream> 2 using namespace std; 3 4 void one(int *array); //形式参数是一个指针 5 void two(int array[]); // 形式参数是一个未定义大小的数组 6 void three(int array[5]); // 形式参数是一个已定义大小的数组 7 8 int main() 9 { 10 int n; 11 int array[5] = { 0 }; 12 int *arr; 13 arr = array; //也可以写成 int *arr = array; 14 one(array); 15 two(array); 16 three(array); 17 printf("数组=%d ", sizeof(array)/sizeof(int)); //得到数组array的内存所占大小 18 printf("指针=%d ", sizeof(arr)); //得到指针arr的内存所占大小 19 return 0; 20 } 21 22 void one(int *array) 23 { 24 int one_size = 0; 25 one_size = sizeof(array); 26 printf("one_size=%d ", one_size); 27 } 28 29 void two(int array[]) 30 { 31 int two_size = 0; 32 two_size = sizeof(array); 33 printf("two_size=%d ", two_size); 34 } 35 36 void three(int array[5]) 37 { 38 int three_size = 0; 39 three_size = sizeof(array); 40 printf("three_sizs=%d ", three_size); 41 }
结果为:
1 one_size=8 2 two_size=8 3 three_sizs=8 4 数组=5 5 指针=8
上面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。
数组作为返回值:C++ 不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。所以如果想要返回一个数组,必须先定义一个返回类型为指针类型的函数。另外C++不支持在函数外返回局部变量的地址,所以使用static定义局部变量(就是数组)来实现返回数组。举个栗子:
1 #include <time.h> 2 #include <iostream> 3 using namespace std; 4 5 6 int *student() //定义一个指针类型的返回类型 7 { 8 srand((int)time(0)); 9 static int array[10] = { 0 }; //用static定义 10 int i; 11 for (i = 0; i<10; i++) 12 { 13 array[i] = rand() % 100; 14 printf("array[%d] = %d ", i, array[i]); 15 } 16 return array; 17 } 18 19 int main() 20 { 21 int *p = student(); //把array的地址赋给指针p 22 int n; 23 for (int i = 0; i < 10; i++) 24 { 25 cout << "*(p + " << i << ") : "; 26 cout << *(p + i) << endl; //打印出指针所指地址的值 27 } 28 return 0; 29 }
Vector(向量): C++ 中的一种数据结构,确切的说是一个类。它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。
1.文件包含:
首先在程序开头处加上 #include<vector> 以包含所需要的类文件 vector。
还有一定要加上 using namespace std;
2.变量声明:
2.1 例: 声明一个 int 向量以替代一维的数组: vector <int> a; (等于声明了一个 int 数组 a[],大小没有指定,可以动态的向里面添加删除)。
2.2 例: 用 vector 代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即: vector <int *> a 。同理想用向量代替三维数组也是一样,vector <int**>a; 再往上面依此类推。
3.具体的用法以及函数调用:
3.1 得到向量中的元素和数组一样,例如:
1 vector <int *> a 2 int b = 5; 3 a.push_back(b); //push_back(b)在数组最后添加数据 4 cout<<a[0]; //输出结果为5 5 /*使用数组给向量赋值: 6 vector<int> v( a, a+sizeof(a)/sizeof(a[0]) ); 7 或者: 8 int a[]={1,2,3,4,5,6,7,8,9}; 9 typedef vector<int> vec_int; 10 vec_int vecArray(a,a+9);*/
更多向量内容可以查看:C++ vector 容器浅析
常用函数:
- strcpy(s1, s2) -- 复制字符串 s2 到字符串 s1。
- strcat(s1, s2) -- 连接字符串 s2 到字符串 s1 的末尾。
- strlen(s1) -- 返回字符串 s1 的长度。
- strcmp(s1, s2) -- 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
- strchr(s1, ch) -- 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
- strstr(s1, s2) -- 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
- append() -- 在字符串的末尾添加字符
- find() -- 在字符串中查找字符串
- insert() -- 插入字符
- length() -- 返回字符串的长度
- replace() -- 替换字符串
- substr() -- 返回某个子字符串