C语言-再论指针与数组
指针与数组的天生姻缘
1、以指针方式来访问数组元素
(1)、数组元素使用时不能整体访问,只能是单个访问。访问形式有两种:数组形式和指针形式。
(2)、数组形式访问数组元素:数组名[下标];(下标从0开始
(3)、指针格式访问数组元素:*(指针+偏移量);
(4)、数组下标方式和指针方式均可以访问数组元素,两者的实质是一样的。在编译器内部都是用指针方式来访问数组的,
数组下标方式只是编译器给编程者提供了一种壳而已。所以用指针方式来访问数组才是本质的做法。
2、从内存角度理解指针访问数组的实质
(1)、数组的特点就是:数组中各个元素的地址是依次相连的,而且数组还有一个很大的特点就是数组中各个元素的类型
比较相同。类型相同就决定了每个数组元素占几个字节是相同的。
(2)、数组中的元素其实就是地址相连接、占地大小相同的一串内存空间。
这两个特点就决定了只要知道数组中一个元素的地址,就可以很容易推算出其他元素的地址。
3、指针与数组类型的匹配问题
(1)、int *p; int a[5]; p = a; //类型匹配,a做右值等同于&a[0];
(2)、int *p; int a[5]; p = &a; //类型不匹配,p是int *,&a是整个数组的指针,也就是一个数组指针类型,不是
int指针类型,所以不匹配。
(3)、&a、a、&a[0]从数值上看是完全相等的,但是从意义上看就不同了。从意义上看,a和&a[0]是数组首元素首地址,
而&a是整个数组的首地址;从类型上看,a和&a[0]是元素的指针,也就是int * 类型的;而&a是数组指针,是int (*)[5];类型。
4、总结:指针类型决定了指针如何参与运算
(1)、指针参与运算时,因为指针变量本身存储的数值是表示地址的,所以运算也是地址的运算。
(2)、指针参与运算的特点就是:指针变量+1,并不是真的加1,而是加1*sizeof(指针类型);如果是int *类型,则+1就
实际表示地址+4,如果是char *指针,则+1就表示地址+1;如果是double *指针,则+1就表示地址+8.
- #include <stdio.h>
- int main(void)
- {
- int a[] = {,,,,};
- printf("a[3] = %d.\n",a[]); //打印出结果是4
- printf("*(a+3) = %d.\n",*(a+)); //打印出结果是4;a在这里做右值,相当于
- //一个地址,a+3相当于地址加3
- //所以就相当于 int *p; p = a + 3; printf出*p;
- return ;
- }
C语言-再论指针与数组的更多相关文章
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
- c语言学习笔记 - 指针和数组
结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...
- C语言中的指针和数组
下面的内容节选自由我所执笔的会议记录.对于本文的不足之处,各位可以提出自己的看法. Q1:指针和数组到底是怎么一回事? A:指针和数组有本质的不同.指针就是一个内存地址,在32位系统下,一个指针永远占 ...
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- C语言中的指针与数组的定义与使用
指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...
- C语言:通过指针对数组元素进行排序
// // main.c // Pointer_array // // Created by ma c on 15/8/2. // Copyright (c) 2015年 bjsxt. All ...
- c语言冒泡排序,指针,数组
冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复 ...
- c语言实现字符指针(字符串)数组的排序
需求: "ff555d", "114ddd", "114dd","aaa", "aaab", &qu ...
随机推荐
- 从高通出重拳,iPhone遭禁售看巨头们的专利大战
一直以来,高通看起来都是很有"骨气"的.面对与苹果的专利纷争,高通始终是据理力争.顽强对抗.截至今年6月中旬,高通和苹果打了50多场专利官司,且这些官司分布于6个不同国家的16个司 ...
- mariadb galera启动问题
搭建了mariadb galera集群后,整个集群停掉后如何启动呢,我们要先启动那个节点呢,今天我尝试把集群机器全部停掉,然后任意启动一个节点,发现报如下的错误: 170620 21:32:55 [E ...
- js如何操作或是更改sass里的变量
/*上网搜索了好多方法,最终只有这一种比较适合*/ 参考: https://blog.csdn.net/weixin_44392565/article/details/85755592 https:/ ...
- mac允许“任何来源”下载的应用
刚买的mac电脑,我们不止在App Store上下载,还会通过浏览器下载 有的时候需要下载一些破解的软件,这个时候安装会提示文件被破坏,很是头疼 不用着急,这是因为mac会判断app如果被破坏,就不允 ...
- 老出BUG怎么办?游戏服务器常见问题解决方法分享
在游戏开发中,我们经常会遇到一些技术难题,而其引发的bug则会影响整个游戏的品质.女性向手游<食物语>就曾遇到过一些开发上的难题,腾讯游戏学院专家团Wade.Zc.Jovi等专家为其提供了 ...
- 小明有5本新书,要借给A、B、C三位小朋友 若每人每次只能借一本,则可以有多少种不同的借法?
/* 问题描述: 小明有5本新书,要借给A.B.C三位小朋友, 若每人每次只能借一本,则可以有多少种不同的借法? 问题分析: 本题属于数学当中最常见的排列组合问题, 即求从5个数当中取3个不同数的排列 ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:字符串
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Comet OJ - Contest #15(B: 当我们同心在一起 )
题目链接 题目描述 平面上有 nn 个坐标相异的点,请问当中有多少组非共线的三个点,这三个点的 外心 也在这 nn 个点之中? 输入描述 第一行有一个正整数 nn 代表平面上的点数. 接下来有 nn ...
- promise核心6 自定义promise
1.定义整体结构(不写实现) 定义一个自己的promise的库 lib(库的简写) 一个js文件.一个js模块(不能用es6 也不能commjs)(用es5模块语法 ) 匿名函数自调用.IIFE ( ...
- JavaWeb之搭建自己的MVC框架(三)
1. 前言 在前两节的内容中,我们完成了一个基本的框架搭建.但是如果我们在前端请求中增加参数,我们要怎么传递到后台方法呢?接下来我们就来研讨这部分内容. 2. 实现 ( ...