C语言数组的总结

一维数组的初始化:

类型说明符 数组名[常量表达式]={}

{}里的值要用’,’间隔开。

注:数组的创建,{}中要给一个常量或者一个常量表达式才可以,不能使用变量。

在内存中的分配:

char arr1[]=”abc”;   在内存的布局:’a’’b’’c’’\0’

char arr2[]={‘a’’b’’c’}  在内存的布局:’a’’b’’c’

一维数组的指针访问:

数组名就是数组首元素的地址,打印数组的时候前面加或者不加&都可以。而且通过数组名+整数的运算就可以获得整个数组的地址。

int main()

{

int arr[5] = { 0 };

int i = 0;

int *p = arr;

int sz = sizeof(arr) / sizeof(arr[0]);

for (i = 0; i < sz; i++)

{

*(p + i) = i;

}

for (i = 0; i < sz; i++)

{

printf("%d\n", *(p + i));

}

system("pause");

return 0;

}

 

一维数组与函数参数:

  一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实

数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组

修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。


一维数组的使用:冒泡排序

void bubbleSort(int arr[],int length)

{

for (int i=0; i<length; i++)

{

        for (int j=0; j<length-1-i; j++)

{

            if (arr[j]>arr[j+1])

{

                int temp=arr[j];

                arr[j]=arr[j+1];\

                arr[j+1]=temp;

             }

        }

}

}

二维数组:

1. 二维数组的创建:

Int arr[3][5]

char arr[3][5]

double arr[3][5]

2. 数组的初始化:

Int arr[3][4]={1,2,3,4};

Int arr[3][4]={{1,2}{3,4}}

Int arr[][4]={{1,2}{3,4}}

注:行可以不写但是列一定要写。

3. 二维数组在内存中的存储:

1. 数组a的地址是ffc1,数组a[0]的地址也是ffc1,即a = a[0];

2.元素a[0][0]的地址是ffc1,所以数组a[0]的地址和元素a[0][0]的地址相同,即a[0] = &a[0][0];

3.最终可以得出结论:a = a[0] = &a[0][0],以此类推,可以得出a[1] = &a[1][0]

4. 二维数组在内存中跟一维数组一样是连续存储的。

5. 有关数组的运算:
int a[] = {1,2,3,4};
  printf("%d\n",sizeof(a)); //16 数组的大小
    printf("%d\n",sizeof(a + 0)); //4 首元素地址
  printf("%d\n",sizeof(*a)); //4 首元素
  printf("%d\n",sizeof(a+1)); //4 第二个元素地址
  printf("%d\n",sizeof(a[1])); //4 第二个元素
  printf("%d\n",sizeof(&a)); //4 数组的地址
  printf("%d\n",sizeof(*&a)); //16 数组的大小&取的是数组首元素的地址*&指向整个数组) 

printf("%d\n",sizeof(&a+1)); //4 是一个地址
    printf("%d\n",sizeof(&a[0])); //4 首元素地址

   printf("%d\n",sizeof(&a[0]+1)); //4 第二个元素地址


char arr[] = {'a','b','c','d','e','f'};

  

   printf("%d\n", sizeof(arr));  //6 数组的大小

   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)); //随机值x 执行需遇到"\0"结束

printf("%d\n", strlen(arr + 0)); //随机值x 执行需遇到"\0"结束

printf("%d\n", strlen(*arr)); //error 执行的"a"的ASCII

printf("%d\n", strlen(arr[1])); //error 执行的"b"的ASCII

printf("%d\n", strlen(&arr)); //随机值x 执行需遇到"\0"结束

printf("%d\n", strlen(&arr + 1)); //随机值x-6 执行需遇到"\0"结束

printf("%d\n", strlen(&arr[0] + 1)); //随机值x-1 执行需遇到"\0"结束


char arr[] = "abcdef";

printf("%d\n", sizeof(arr)); //7 数组的大小,包括"\0"

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)); //error 执行的"a"的ASCII

   printf("%d\n", strlen(arr[1])); //error 执行的"b"的ASCII

   printf("%d\n", strlen(&arr)); //6 数组的长度

   printf("%d\n", strlen(&arr+1)); //随机值

   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 + 1)); //4 跳过p的地址

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)); //error 执行的"a"的ASCII

   printf("%d\n", strlen(p[0])); //error 执行的"a"的ASCII

   printf("%d\n", strlen(&p)); //随机值

   printf("%d\n", strlen(&p+1)); //随机值


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 sizeof(表达式) 内部表达式不计算。这里就表示一行元素

常用字符串处理函数 (以下函数需要头文件“ string.h ” )

1、 strlen()作用是测试字符串长度。这里不包括‘ \0’ . 使用形式 strlen(数组名或字符串常量 )

2、 strcat()作用是连接两个字符串。调用方式 strcat(字符数组 1名,字符数组 2名 ) ;合并后的字符串在字 符数组 1中。并删除字符串1中后面的串标志“\0”。

3、 strcmp()比较两个字符串是否相等。调用方式 strcmp(字符串 1,字符串 2) ;相等时值为 0。 1>2时为正数。 1<2时为负数。

4、 strcpy()复制字符串。调用方式 strcpy(字符数组 1,字符串 2);2的内容复制到 1中。 1只能是字符数组名。

5.字符串输入函数:gets(字符数组名)

6.字符串输出函数:puts(字符数组名)

猜你喜欢

转载自blog.csdn.net/zhangtianqiang1314/article/details/79817791