代码一
int main()
{
int arr[] = { 1,2,3 };//不完全初始化
char arr2[4] = { 'a',98 };
char arr3[4] = "ab";
char arr4[] = "abshsh";
printf("%d\n", sizeof(arr4));
printf("%d\n", strlen(arr4));
return 0;
}
代码二
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
printf("%d\n", sizeof(arr1));
printf("%d\n", sizeof(arr2));//其中的arr2中只有三个字符串'a','b','c'里面没有\0
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));//15是乱码了
return 0;
}
补充说明:sizeof计算arr4所占空间的大小,7个元素-char 7*1=7,strlen求字符串的长度,当到\0时就停止了,求的是’\0’之前的字符串的个数,arr3中里面有三个字符ab还有一个\0,strlen和sizeof没什么关系
strlen是求字符串长度的-只能针对字符串求长度-库函数-使用时引用头文件
sizeof 计算变量,数组,类型的额大小-单位是字符-操作符
int main()
{
char arr[] = "abcdef";
printf("%c\n", arr[3]);
return 0;
}
方法一
int main()
{
char arr[] = "abcdef";
int i = 0;
for (i = 0;i < 6;i++)
{
printf("%c ", arr[i]);
}
return 0;
}
方法二
int main()
{
char arr[] = "abcdef";
int i = 0;
int len = strlen(arr);
for (i = 0;i < len;i++)
//for (i = 0;i < (int)strlen(arr);i++)//strlen是无符号数,转成int有符号整型数
{
printf("%c ", arr[i]);
}
return 0;
}
补充说明 //for (i = 0;i < (int)strlen(arr);i++)//strlen是无符号数,转成int有符号整型数
方法三
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);//下标访问打印字符
int i = 0;
for (i = 0;i < sz;i++)
{
printf("%d", arr[i]);
}
return 0;
}
方法四打印地址,利用地址访问
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0;i < sz;i++)
{
printf("&arr[%d]=%p\n", i, &arr[i]);
}
return 0;
}
补充说明:%d对应的是i
#include
int main()
{
int arr[3][4] = { {1,2,3},{4,5} };
//1 2 3 4
//4 5 0 0
//0 0 0 0
int i = 0;
for (i = 0;i < 3;i++)
{
int j = 0;
for (j = 0;j < 4;j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
int main()
{
int arr[3][4] = { {1,2,3},{4,5} };
int i = 0;
for (i = 0;i < 3;i++)
{
int j = 0;
for (j = 0;j < 4;j++)
{
printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
}
}
return 0;
}//与打印一维数组一样
补充说明:将一个整形数组排序
冒泡排序:相邻两个元素之间进行计较排序
10个元素9趟,变成9个元素8趟,每一趟就是相邻两个元素进行比较交换
对于9,8,7,6,5,4,3,2,1,0进行升降排序
#include
void bubble_sort(int arr[],int sz)//注意哦sz不能在函数中计算
{
//确定冒泡排序的趟数,n个元素有n-1个趟数
int i = 0;
for (i = 0;i < sz - 1;i++)
{
//每一趟冒泡排序
int j = 0;
for (j = 0;j < sz -1- i;j++)//sz-i=可以知道不同的趟数
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//对arr进行排序,排成升序
bubble_sort(arr, sz);//冒泡排序函数
for (i = 0;i < sz;i++)
{
printf("%d ", arr[i]);
}
return 0;
}
还有另一种方法就是 int flag = 1;假设这一趟要排序的数据已经有序//这是一个状态的定义,如果为一则不用再冒泡排序了
void bubble_sort(int arr[], int sz)
{
int i = 0;
for (i = 0;i < sz - 1;i++)
{
int flag = 1;
每一趟冒泡排序
int j = 0;
for (j = 0;j < sz - 1 - i;j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;//本趟排列的数据其实不完全有序
}
}
if (flag == 1)
{
break;
}
}
}
补充说明:1.break只能在for和Switch中使用,在循环语句中使用,在这里不是作用于if语句,而是在这个条件满足的条件下怎样
#include
int main()
{
int arr[10] = { 1,2,3,4,5 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
printf("%d\n", *arr);
return 0;
}
补充说明:从计算结果可知:数组名就是首元素的地址
1.sizeof(数组名)-数组名表示整个数组,计算的是整个数组的大小,单位是字节
2.&数组名,数组名代表整个数组,&数组名,取出的是整个数组的地址
来点实际的例子
int main()
{
int arr[] = { 1,2,3,4,5 };
//例子1234455
printf("%p\n", arr);
printf("%p\n", &arr[0]);
printf("%p\n", &arr);
printf("%p\n", arr+1);
printf("%p\n", &arr[0]+1);
printf("%p\n", &arr + 1);
补充说明;arr,&arr[0]取的是首元素的地址1,下标为0的为首元素
&arr-数组的地址和数组首元素的地址是一样的,但代表的意义不一样,有什么不一样呢?可以参考后面三个打印的结果明显看出,地址的增加的数目不同。一个是单个,一个是整体。