初始数组2

数组的运算:

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)




猜你喜欢

转载自blog.csdn.net/chengx1996/article/details/79974335