目录
1.1 辨析strlen和sizeof
(二)二维数组:
数组:有序排列的同类数据元素的集合称为数组(array)
数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。
一维数组的初始化:
char arr1[] = { 'a','b','c' }; //a b c //这个方法初始化了三个字符[3]
char arr2[] = { 'a',98,'c' }; //98=b , arr2=arr1
char arr3[] = "abc"; //a b c \0 //这个方法初始化了四个字符[4]
char arr4[5] = { 'a','b','c' }; //a b c 系统填两个\0
char arr5[5] = "abc"; //a b c \0 系统填一个\0
数组元素的个数和数组输出:
数组元素下标从0开始,[ ] 叫下标引用操作符,arr[2]找到的是数组的第三个元素
计算元素个数:int sz = sizeof(arr1) / sizeof(arr1[0]);
for (int i = 0; i < sz; i++) //如果<=上面五个数组的输出都是abc?
{
cout << arr1[i]; //输出abc
}
辨析strlen和sizeof
- strlen函数遇到\0就会停止下来,计算\0前面的元素个数
- sizeof不能计算动态分配空间的大小
char * s = "0123456789";
sizeof(s); //结果 4 s是指向字符串常量的字符指针
sizeof(*s); //结果 1 *s是第一个字符
strlen(s); //结果 10 有10个字符,strlen是个函数内部实现是 用一个循环计算到\0为止之前
strlen(*s); //结果 10 错误char s[] = "0123456789";
sizeof(s); //结果 11 s是数组,计算到\0位置,因此是10+1
strlen(s); //结果 10 有10个字符,strlen是个函数内部实现是用一个循环计算到\0为止之前
sizeof(*s); //结果 1 *s是第一个字符char s[100] = "0123456789";
sizeof(s); //结果是100 s表示在内存中的大小 100×1
strlen(s); //结果是10 strlen是个函数内部实现是用一个循环计算到\0为止之前int s[100] = "0123456789";
sizeof(s); //结果 400 s表示再内存中的大小 100×4
strlen(s); //错误 strlen的参数只能是char* 且必须是以‘\0‘结尾的char q[]="abc";
char p[]="a\n";
sizeof(q),sizeof(p),strlen(q),strlen(p);\\结果是 4 3 3 2char p[] = {'a','b','c','d','e','f','g','h'};
sizeof(p); //结果是8 p表示在内存中的大小 8×1
strlen(p); //为一个随机值,结果与编译器有关,不同编译器结果一般不同char q[] = {'a','b','c','d,'\0','e','f','g'};
sizeof(q); //结果是8 p表示在内存中的大小 8×1
strlen(q); //结果为4 存在'\0',遇到'\0'计算停止。
————————————————
版权声明:本文为CSDN博主「Oragen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/magic_world_wow/article/details/80500473
数组元素的存储 :
一维数组在内存中连续存放,随着数组下标的增长,地址是由低到高变化的
全局变量和静态变量在未初始化的时候默认值=0
注意指针打印数组是+1
二维数组:
可以省略行,不可以省略列
第一行最后一个元素地址和第二行第一个元素地址差4,在内存中连续存放
数组名=数组首元素地址
有2个例外下数组名表示整个数组:
1 sizeof(数组名),数组名不是数组首元素的地址,数组名表示整个数组,计算的是整个数组的大小
2 &数组名,数组名不是数组首元素的地址,数组名表示整个数组,取出的是整个数组的地址第三个是数组名+1,加的是整个数组的地址
数组传参:冒泡排序
十个元素进行九次冒泡排序,剩下的一个元素必定在应该在的位置。
每一趟内部都是两个相邻元素比较,第一趟十个元素比较九对,第二趟九个元素比较八对。
#include<iostream> using namespace std; //*******************冒泡排序********************** //void bubble_sort(int arr[],int sz) //数组传参,数组接受 void bubble_sort(int *arr, int sz) //两种写法 { int i = 0; for (i = 0; i < sz - 1; i++) //趟数 { int flag = 1; //假设已经有序了 int j = 0; //拿出来定义,不然if里面会报错 for (j = 0; j < sz- 1 -i ; j++) if (arr[j] > arr[j + 1]) //交换 { flag = 0; //如果第一趟不是有序的,那么flog=0 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } if (flag == 1)//如果第一堂出来flag还是等一1那么说明已经有序 { break;//不用再排序了,直接推出排序循环 } } //排序完成后输出排序后的数组: for (int k = 0; k < sz; k++) { cout << arr[k]<<" "; } }