C语言指针运算不理解?深入浅出通俗易懂,一题吃透指针与数组

C语言指针运算不理解?深入浅出通俗易懂,一题吃透指针与数组int array[3][4] = }*)代表 array[0][1] ,故打印2; 移动的字节数: pArray+sizeof*1,表示第一

大家好,欢迎来到IT知识分享网。

C语言指针运算不理解?深入浅出通俗易懂,一题吃透指针与数组

前言

本文主要介绍的是C语言指针知识,希望对于广大读者学习C语言有一些帮助。深入了解C语言指针小知识,先看题算结果:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int  array[3][4] = 
	{ 1, 2, 3,
		4, 5, 6, 
		7, 8, 9, 
		10, 11, 12
	};
	int(*pArray)[4] = array;
	printf("%d ", *(pArray[0] + 1));
	printf("%d ", **(pArray + 1));
	pArray++;
	printf("%d ", *(*pArray + 1));
	system("pause");
	return 0;
}

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分,这道题目就很有效的考验了一个人对于指针的运算与C语言数组的掌握。

知识解析

主要使用到的知识如下:

  1. C语言数组指针: 一个指向数组的指针
  2. C语言中指针如何表示二维数组
  3. C语言指针的的运算: p+n的理解

数组指针

即是指向数组的指针。例:int (*p)[4]; p即为指向数组的指针,又称数组指针。数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。

指针如何表示数组

一维数组中有如下重点:

C语言指针运算不理解?深入浅出通俗易懂,一题吃透指针与数组

当一级指针p指向数组array时,*(p+i)等效于array[i] 等效于p[i]

二维数组中有如下重点:

C语言指针运算不理解?深入浅出通俗易懂,一题吃透指针与数组

C语言指针运算

指针p+n 解释为: p+sizeof(指针所指向的类型)*n;说到这里不得不讲下C语言指针中的两个重要类型了。如果存在指针 int *p 则有如下两个类型:

  1. 指针的类型: 去掉变量 ,剩下的就是类型,故是 int *;
  2. 指针所指向的类型: 去掉*和变量名即可得到地址对应的内存中的存储的数据类型,即int类型。

故对于 int(*p)[3] 的p+1操作 应该理解为:p+sizeof(int[3])*1;

题目分析:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int  array[3][4] = 
	{   1, 2, 3,4,
	    5, 6, 7,8,
		  9, 10, 11, 12
	};
	int(*pArray)[4] = array;
	printf("%d ", *(pArray[0] + 1));
	printf("%d ", **(pArray + 1));
	pArray++;
	printf("%d", *(*pArray + 1));
	system("pause");
	return 0;
}

*(pArray[0] + 1))代表 array[0][1] ,故打印2;

(pArray + 1) 移动的字节数: pArray+sizeof(int[4])*1,表示第一行(数组从第0行开始计数)第一个位置的地址,故**(pArray + 1) 得到的应该是第1行第一个元素,即打印5

pArray++后 pArray示第一行(数组从第0行开始计数)第一个位置的地址 ,而在数组中p[0] 并不一定表示第0行或者第0列哦,而是以p的当前地址中的偏移位置,故*(*pArray + 1)代表当前地址的第1个元素,故打印6 。综上打印结果是2 5 6 。

运行测试

C语言指针运算不理解?深入浅出通俗易懂,一题吃透指针与数组

尾言

文章都是手打原创,每天最浅显的介绍C语言、C++,windows知识,喜欢我的文章就关注一波吧,每天带你学习C/C++不同的知识,也可以看到最新更新和之前发表的文章哦。如果足下基础比较差,不妨关注下人人都可以学习的视频教程

《C语言51课视频教程合集》

《C++45课视频教程》

通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势

如果今天学到知识的,可以再留言区留言学到了哦,如果喜欢可以一键三连哦,这真的对我很重要!!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/47281.html

(0)
上一篇 2024-04-23 08:00
下一篇 2024-04-24 19:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信