网站首页 > 技术文章 正文
前言
本文主要介绍的是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语言数组的掌握。
知识解析
主要使用到的知识如下:
- C语言数组指针: 一个指向数组的指针
- C语言中指针如何表示二维数组
- C语言指针的的运算: p+n的理解
数组指针
即是指向数组的指针。例:int (*p)[4]; p即为指向数组的指针,又称数组指针。数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。
指针如何表示数组
一维数组中有如下重点:
当一级指针p指向数组array时,*(p+i)等效于array[i] 等效于p[i]
二维数组中有如下重点:
C语言指针运算
指针p+n 解释为: p+sizeof(指针所指向的类型)*n;说到这里不得不讲下C语言指针中的两个重要类型了。如果存在指针 int *p 则有如下两个类型:
- 指针的类型: 去掉变量 ,剩下的就是类型,故是 int *;
- 指针所指向的类型: 去掉*和变量名即可得到地址对应的内存中的存储的数据类型,即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++,windows知识,喜欢我的文章就关注一波吧,每天带你学习C/C++不同的知识,也可以看到最新更新和之前发表的文章哦。如果足下基础比较差,不妨关注下人人都可以学习的视频教程
通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势
如果今天学到知识的,可以再留言区留言学到了哦,如果喜欢可以一键三连哦,这真的对我很重要!!
猜你喜欢
- 2024-09-23 简说C语言指针数组和数组指针(c语言指针和数组的关系)
- 2024-09-23 每天写点笔记——C语言笔记之数组
- 2024-09-23 一文掌握C语言数组使用(c语言中数组的用法)
- 2024-09-23 指针和数组:C语言中的两个利器(c语言中指针和数组的关系)
- 2024-09-23 第四章: 数组(数组csdn)
- 2024-09-23 数组(下):数据结构中的数组和编程语言中的数组的区别
- 2024-09-23 C语言,结构体数组的定义和引用(c语言结构体数组怎么定义)
- 2024-09-23 C语言二维数组,如何定义?(c语言中二维数组的定义方式)
- 2024-09-23 C语言:数据结构-数组的定义、逻辑结构和特点
- 2024-09-23 C语言 二维数组的定义和使用(c语言二维数组详解)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 571℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 512℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 468℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 447℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 445℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)