31天C语言——7,数组


数组的本质:多个变量。
数组的长度不可变,且元素类型一致。

1,创建数组

创建指定长度的数组:

int a[10];

int类型,10个元素。

创建之后可以赋值:

int a[10]={
    
    1,2,3};

前三个为123,后面为0

也可以由赋值来决定长度:

int a[] = {
    
    1, 2, 3};

三个元素,123

2,sizeof

sizeof a:获取a占据的字节数

简单使用:int a[3]

#include <stdio.h>

int main() {
    
    
  int a[3];
  printf("%ld\n", sizeof a);
  return 0;
}

效果:12,3个4。

在这里插入图片描述
获取数组的长度:总字节数除以单位字节数。

#include <stdio.h>

int main() {
    
    
  int a[3];
  printf("%ld\n", sizeof a / sizeof a[0]);
  return 0;
}

效果:

在这里插入图片描述

3,下标访问

由下标可以访问数组的元素。
下标从0开始。

a[0]		数组a的第一个元素
a[1]		...第二个元素

由循环可以遍历一个数组。

#include <stdio.h>

int main() {
    
    
  int a[] = {
    
    1, 3, 2, 4, 6, 5, 7};
  for (int i = 0; i < sizeof a / sizeof a[0]; i++) {
    
    
    printf("%d\n", a[i]);
  }
  return 0;
}

效果:

在这里插入图片描述

4,内存探秘

%p:指针地址值

#include <stdio.h>

int main() {
    
    
  int a[] = {
    
    1, 3, 2, 4, 6, 5, 7};
  for (int i = 0; i < sizeof a / sizeof a[0]; i++) {
    
    
    printf("%d:%p\n", a[i], &a[i]);
  }
  return 0;
}

效果:每个加4,代表int。

在这里插入图片描述
结论:数组,在空间上是一块连续的内存。

十六进制:
8,9,A,B,C,D,E,F,0

5,多维数组

多维数组:数组的元素是数组。

#include <stdio.h>

int main() {
    
    
  int a[3][4];
  printf("%ld\n", sizeof a);
  return 0;
}

效果:48。
在这里插入图片描述
三行四列,十二个元素,乘以四。

也可以赋值,遍历:

#include <stdio.h>

int main() {
    
    
  int a[3][4] = {
    
    {
    
    1, 2, 3, 4}, {
    
    11, 22, 33, 44}, {
    
    111, 222, 333, 444}};

  int len1 = sizeof a / sizeof a[0];
  int len2 = sizeof a[0] / sizeof a[0][0];
  for (int i = 0; i < len1; i++) {
    
    
    for (int j = 0; j < len2; j++) {
    
    
      printf("%d\t", a[i][j]);
    }
    printf("\n");
  }
  return 0;
}

效果:

在这里插入图片描述

番外:数组与指针

数组名

数组名代表首个元素的指针。
解指针后,可以得到首个元素。

#include <stdio.h>

int main() {
    
    
  int arr[3] = {
    
    1, 2, 3};
  printf("%d\n", *arr);
  return 0;
}

效果:

在这里插入图片描述

简单使用

交换长度为2数组的两个值。

#include <stdio.h>

void swap(int *arr) {
    
    
	int temp = *arr;
	*arr = *(arr + 1);
	*(arr + 1) = temp;
}

int main() {
    
    
	int arr[2] = {
    
    11, 22};
	swap(arr);
	printf("%d,%d\n", arr[0], arr[1]);
	return 0;
}

效果:

在这里插入图片描述

分析:
swap(arr):传入的是,首个元素的地址指针。
temp = *arr:将首个元素的值赋值给temp。
*arr = *(arr + 1):首个元素的指针改为第二个元素的值。
*(arr + 1) = temp:第二个元素的指针改为temp。

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/124397902