C语言--指针与数组--遍历数组的n种方式【详细】

C语言--指针与数组--遍历数组的n种方式【详细】_第1张图片


 一.一维数组名的含义

arr一般表示数组的其实地址除了两种例外)

1.在定义数组的同一个函数中(不是形参),求sizeof(arr),求整个数组的字节数
2.在定义数组的同一个函数中(不是形参),&arr+1,加整个数组的大小 (经常考试)
3.除上面以外,arr都表示数组的起始地址(首元素的地址)


 二.指针与数组的互换

上文提到过:arr表示数组的首元素地址,由于如此,数组就和指针扯上了关系

C语言--指针与数组--遍历数组的n种方式【详细】_第2张图片

   int *p = arr;有如下互换的情况成立
  *(p+i)==p[i];
  *(arr+i) == arr[i];
   一般建议,尽量使用下标,因为*容易漏掉

 所以有时候,程序中的数组形式其实是个指针,有时候的指针其实想要表达数组,我们只要通过上面的公式转回原来的意思。比如p[i]转换为数组就是arr[i]。

下面的程序表达的都是元素4

int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int* p = &arr[0]; //定义一个指针变量保存数组的首元素地址
	int* p1 = arr;//定义一个指针变量保存数组的首元素地址
	// p===arr 两者可以互换
	printf("%d\n", arr[3]);
	printf("%d\n", p[3]);
	printf("%d\n", *(p + 3));
	printf("%d\n", *(arr + 3));
	return 0;
}

C语言--指针与数组--遍历数组的n种方式【详细】_第3张图片


三.遍历数组的n种方式

有两大思路:

1.下标移动

2.指针移动 

 方法一:

C语言--指针与数组--遍历数组的n种方式【详细】_第4张图片

 方法二:

C语言--指针与数组--遍历数组的n种方式【详细】_第5张图片

方法三:

C语言--指针与数组--遍历数组的n种方式【详细】_第6张图片

 方法四:

C语言--指针与数组--遍历数组的n种方式【详细】_第7张图片

 方法五:

C语言--指针与数组--遍历数组的n种方式【详细】_第8张图片

方法六:

 C语言--指针与数组--遍历数组的n种方式【详细】_第9张图片

//第一种写法:通过下标遍历数组
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}
}


//第二种写法:通过指针遍历数组
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;
	for (int i = 0;i < sz;i++)
	{
		printf("%d ", *p); //不推荐
		p++;
	}
}



//第三种写法:通过指针遍历数组
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;
	for (int i = 0;i < sz;i++)
	{
		printf("%d ", *(p+i)); //指针本身不动,i在动
	}
}


//第四种写法:
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;
	for (int i = 0;i < sz;i++)
	{
		printf("%d ", p[i]); //p[i]==arr[i],指针有时候可以和数组互换,把它转换为数组
	}
}




//第五种写法:
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;
	for (int i = 0;i < sz;i++)
	{
		printf("%d ", *(arr+i)); //*(p+i)==*(arr+i)==p[i]==arr[i]
	}
}



//第六种写法:
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int* p = &arr[0];p < &arr[sz];p++) //通过指针移动
	{
		printf("%d ", *p);
	}
}

 创作不易, 如果这份博客对你有帮助,可以给博主一个免费的点赞以示鼓励。
欢迎各位帅哥美女点赞评论⭐收藏,谢谢!!!
如果有什么疑问或不同的见解,欢迎在评论区留言哦。
祝各位生活愉快⭐

你可能感兴趣的:(C语言学习,c语言)