一题诠释C语言指针与数组
0 1 C语言经典试题
本文主要介绍的是C语言指针知识,希望对于广大读者学习C语言有一些帮助。深入了解C语言指针小知识,先看题算结果:
题目源码
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){intarray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};int(*pArray) = array;printf("%d ", *(pArray + 1));printf("%d ", **(pArray + 1));pArray++;printf("%d ", *(*pArray + 1));system("pause");return 0;}
指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分,这道题目就很有效的考验了一个人对于指针的运算与C语言数组的掌握。
知识解析主要使用到的知识如下:
[*]C语言数组指针: 一个指向数组的指针
[*]C语言中指针如何表示二维数组
[*]C语言指针的的运算: p+n的理解
数组指针即是指向数组的指针。例:int (*p); p即为指向数组的指针,又称数组指针。数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p,定义了p,p,p三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。
指针 表示一维数组一维数组中有如下重点:
当一级指针p指向数组array时,*(p+i)等效于array 等效于p
二维数组中有如下重点:
C语言指针运算指针p+n 解释为: p+sizeof(指针所指向的类型)*n;说到这里不得不讲下C语言指针中的两个重要类型了。如果存在指针 int *p 则有如下两个类型:
[*]指针的类型: 去掉变量 ,剩下的就是类型,故是 int *;
[*]指针所指向的类型: 去掉*和变量名即可得到地址对应的内存中的存储的数据类型,即int类型。
故对于 int(*p) 的p+1操作 应该理解为:p+sizeof(int)*1
题目分析 #include<stdio.h>#include<stdlib.h>#include<string.h>int main(){int array ={ 1, 2, 3,4, 5, 6, 7,8, 9, 10, 11, 12};int(*pArray) = array;printf("%d ", *(pArray + 1));printf("%d ", **(pArray + 1));pArray++;printf("%d", *(*pArray + 1));system("pause");return 0;}*(pArray + 1))代表 array ,故打印2;
(pArray + 1) 移动的字节数:pArray+sizeof(int)*1,表示第一行(数组从第0行开始计数)第一个位置的地址,故**(pArray + 1) 得到的应该是第1行第一个元素,即打印5
pArray++后 pArray示第一行(数组从第0行开始计数)第一个位置的地址 ,而在数组中p 并不一定表示第0行或者第0列哦,而是以p的当前地址中的偏移位置,故*(*pArray + 1)代表当前地址的第1个元素,故打印6 。综上打印结果是2 5 6 。
运行测试 今日结语文章都是手打原创,每天最浅显的C语言、C++,windows知识,如果足下基础比较差,不妨关注下,人人都可以学习的视频教程,通俗易懂,深入浅出,一次只讲一个知识点。不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势。喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。
微信号:coolmoying 今日头条:C语言基础 -扫码关注我-
本文分享自微信公众号 - C语言编程基础(goodStudyCode)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
文档来源:51CTO技术博客https://blog.51cto.com/u_15297386/3289552
页:
[1]