数组的运算:
char arr[ ] = {'a','b','c','d','e','f'};
printf("%d\n",strlen(arr)); //>=6,假如是10
printf("%d\n",strlen(arr+0)); //10
printf("%d\n",strlen(*arr)); //报错
printf("%d\n",strlen(arr[1])); //报错
printf("%d\n",strlen(&arr)); //10 ----数组的地址
printf("%d\n",strlen(&arr+1)); //4 ----下一个数组的地址
printf("%d\n",strlen(&arr[0]+1)); //9 ----arr+1
strlen 求长度,字符串长度不包括\0,但是遇到\0才会停止;
strlen为char *类型,表示字符地址,strlen是函数,需要传参。
char arr[ ] = "abcdef";
printf("%d\n",sizeof(arr)); //7
printf("%d\n",sizeof(arr+0)); //4
printf("%d\n",sizeof(*arr)); //1
printf("%d\n",sizeof(arr[1])); //1
printf("%d\n",sizeof(&arr)); //4
printf("%d\n",sizeof(&arr+1)); //4
printf("%d\n",sizeof(&arr[0]+1)); // 4
printf("%d\n",strlen(arr)); //6
printf("%d\n",strlen(arr+0)); //6
printf("%d\n",strlen(*arr)); //报错
printf("%d\n",strlen(arr[1])); //报错
printf("%d\n",strlen(&arr)); //6
printf("%d\n",strlen(&arr+1)); //radom
printf("%d\n",strlen(&arr[0]+1)); //5
char *p = "abcdef";
printf("%d\n",sizeof(p)): //4
printf("%d\n",sizeof(p+1)); //4
printf("%d\n",sizeof(*p)); //1
printf("%d\n",sizeof(p[0])); //1
printf("%d\n",sizeof(&p)); //4
printf("%d\n",sizeof(&p+1)); //4
printf("%d\n",sizeof(&p[0]+1)); //4
printf("%d\n",strlen(p)); //6
printf("%d\n",strlen(p+1)); //5
printf("%d\n",strlen(*p)); //报错
printf("%d\n",strlen(p[0])); //报错
printf("%d\n",strlen(&p)); //radom
printf("%d\n",strlen(&p+1)); //radom
printf("%d\n",strlen(&p[0]+1)); //5
二维数组:int a[3][4] = {0};
printf("%d\n",sizeof(a)); //48
printf("%d\n",sizeof(a[0][0])); //4
printf("%d\n",sizeof(a[0])); //16
printf("%d\n",sizeof(a[0]+1)); //4
printf("%d\n",sizeof(a+1)); //4
printf("%d\n",sizeof(&a[0]+1)); //4
printf("%d\n",sizeof(*a)); //16
printf("%d\n",sizeof(a[3])); //16
(a+1代表第二个元素的地址,&a+1代表下一个数组的地址)
(数组允许越界访问,但不允许写入操作。)
(任何数组传参都会降为指向其内部元素类型的一级指针!)
例:通过冒泡排序实现一个数组的排序;
#include <stdio.h>#include <Windows.h>
void bubble_spot(int arr[], int size)
{
int i = 0;
for (; i < size - 1; i++){
int j = 0;
for (; j < size-1-i; j++){
if (arr[j] > arr[j + 1]){
arr[j] ^= arr[j+1];
arr[j+1] ^= arr[j];
arr[j] ^= arr[j+1];
}
}
printf("%d %d\n", arr[i],i);
}
}
int main()
{
int arr[] = { 1, 25, 2, 6, 2, 9, 0, 14, 46, 12, 31, 11, 52, 4 };
int size = sizeof(arr) / sizeof(arr[0]);
bubble_spot(arr, size);
system("pause");
return 0;
}
可得到数组内元素从小到大排序。
(int arr[ ]处,[ ]内数字可省略,它的值是size)