指针:说简单点就是一个地址。例如int *p,p是个变量,里面放的是地址0x0000,同理,每一个指针,不管什么类型,都是地址,也就是空间都是4个字节(32位机)。

以此类推,指针也有指向它的指针int **f,f是一个变量,它指向的是一个指针,f里面放的也是一个地址。也是4个字节。

而且记得放在=号的左右两边是不一样的表示。*p放在右边表示这个值,放在左边表示放这个值的那块空间。

永远记住,只有这个表达式可以表示空间的时候,才能放到左边。

例如说结构EX,typedef struct Node{int a,char b[10]}EX;

EX x={1,{1.,2,3}};

EX *p=&x;

p->b它不可以作为一个左值,因为他这个表达式的意思是表示数组的首地址,它是一个常量。就和数组名称不能做左值一样,因为他也是一个常量。

指针可以指向任何类型。

x=y;x的含义是x所代表的的地址,y的含义是有所代表的地址里面的内容。记住要将等号两边的整体的东西来看,p就是p,*p就是*p,不要缺少东西的看,因为他们表示的东西根本不同。

int a[100];当a作为右值时代表的是数组首元素的地址,和&a[0]一样,但是注意,这仅仅是代表,而没有一个地方来存储这个地址,也就是说编译器并没有为数组a分配一块内存来保存其地址,这一点与指针有很大差别。由此,可见a不能作为左值。编译器会认为数组名作为左值代表的意思是a的首元素的首地址,但是这个地址开始的一块内存是一个总体,我们只能访问数组的某个元素而无法把数组当做一个总体进行访问,我们可以把a[i]当做左值,但是无法把a当做左值。

1.最简单的,对常用变量取址

int a=100;int *p=&a;(int *p;p=&a)

2.指向数组的指针

int vector[10],*vp=vector;这个没什么问题,定义一个整型指针,指向数组的首地址(我们知道,数组名称也表示数组的首地址)

int matrix[3][10];*vp=matrix;这个是不对的,因为matrix不是一个指向整型的指针,它是一个指向整型数组的指针。int (*p)[10],这个表达式要这么理解,因为可以对p进行*操作,所以p肯定是指针,接下来执行下标引用,所以p指向的是某种类型的数组。由于p是指向一个整型数组的指针,所以p+1,p+2它每加一次是要根据10个整型值的长度进行调整。如果需要一个一个移动,那么就是int *p=matrix[0];int
*p=&matrix[0][0];

3.指针数组

int *api[10];这个先要进行下标操作,所以api是一个数组,又由于可以对数组元素做*操作,所以它的元素肯定是指针。所以他是指针数组。

数组:一个连续的空间放着一堆同样类型的东西。这一堆东西可以是任何类型,整型,字符型,指针等等。

我们对于连续的东西,有一个认识,只要知道了第一个的信息,后面的直接加,就可以知道了,所以关键的是表示第一个的信息。

这个时候数组的名字就发挥了作用,数组名可以表示第一个元素的位置,也可以表示本数组的首地址。(这两个概念有区别:别人举了个例子应该很形象&a[0],&a这两个值相同,但意义不同,一个是第一个元素的地址,一个是数组的首地址,就相当于湖南的省政府在长沙,长沙的市政府也在长沙,但代表的意义不同)。

指针和数组的关系

指针和数组没有任何关系。

指针就是指针,指针变量在32位系统下,永远占4个字节,其值为某一个内存的地址,指针可以指向任何地方,但是并不是任何地方你都能通过这个指针变量来访问到。

数组就是数组,其大小与元素的类型和个数有关,定义数组时必须指定其元素的类型和个数。数组可以存任何类型的数据,但是不能存函数。

指针的移动

一个类型为T的指针的移动,是以sizeof(T)为移动单位的。

int a[5]={1,2,3,4,5};&a+1取数组的首地址,该地址加上sizeof(a)的值,即&a+5*sizeof(int),也就是下一个数组的首地址,显然当前指针已经过了界。

*(a+1):a和&a的值是一样的,但是意思不一样,a是数组首元素的地址,也就是a[0]的地址,&a是数组的首地址,a+1是数组的下一个元素的地址,即a[1]的地址,&a+1是下一个数组的首地址。

c语言指针,数组的更多相关文章

  1. c语言指针数组与数组指针

    一.指针数组和数组指针的内存布局初学者总是分不出指针数组与数组指针的区别.其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是“储存指针的数组”的简称.数 ...

  2. 【嵌入式开发】C语言 指针数组 多维数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21402047 . 1. 地址算数运算示例 指针算数运算 ...

  3. C语言指针数组(每个元素都是指针)

    转载:http://c.biancheng.net/cpp/html/3246.html 注意:数组指针的区别 如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组.指针数组的定义形式一般 ...

  4. C语言 指针数组 多维数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21402047 . 1. 地址算数运算示例 指针算数运算 ...

  5. c语言 指针数组

    指针数组指针数组是数组,指针数组每个元素是一个指针指针数组的定义:type* parray[n]; type* 是数组中每个元素的类型parray 为数组名n为大小 例子:float* a[3] // ...

  6. C语言 指针数组指针

    指向指针数组的指针. 1 #include <stdio.h> 2 3 int main(void) 4 { 5 char *pa[4]={"aaaaa"," ...

  7. c语言指针数组和结构体的指针

    指向数组的指针,先初始化一个数组,使用传统方式遍历 void main() { ] = { ,,,, }; ; i < ; i++) { printf("%d,%x\n", ...

  8. C语言--指针数组大小

    #include <stdio.h> #include <string.h> int main(void) { char *str[3]={ "Hello,thisi ...

  9. C语言指针【转】

    一.C语言指针的概念 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细 ...

  10. C语言入门---第九章 C语言指针

    没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...

随机推荐

  1. Python编程-一个小爬虫工具的实现过程

    需求描述: 1,打开网站: 2,获取网站的文件内容: 3,返回保存到文件中: 这里的就用到了多线程的方法 import requests,threading,time def write_html(u ...

  2. 【前端】【javascript】es6中的遍历器接口Iterator

    好久没发文章啦-.-为了证明我还活着,我决定从笔记里面抓一篇还算不乱比较像文章的发出来... 这些笔记是我在学es6的时候断断续续记录的,最近会一份一份整理陆陆续续发出来,顺便也自己再看一遍.我学习e ...

  3. Android之单元测试学习

    1.单元测试概念 单元测试(又称为模块测试),检验程序模块(软件设计的最小单位)正确性的测试工作,常常是程序员写的一段代码.对于面向对象编程,最小单元就是方法,包括基类(超类).抽象类.或者派生类(子 ...

  4. 分享几个高效编写JS 的心得

    原则 不要做任何优化除非的确需要优化   任何的性能优化都必须以测量数据为基础,如果你怀疑代码存在性能问题,首先通过测试来验证你的想法.性能优化三问 我还能做哪些工作从而让代码变得更有效率? 流行的J ...

  5. windows下,CSV文件Excel打开乱码

    在windows下面,csv文件另存为UTF-8,在excel中打开中文是乱码,如果另存为utf-8 Big + BOM,Excel打开则是正常显示

  6. 浅谈双流水线调度问题以及Jhonson算法

    引入:何为流水线问题 有\(n\)个任务,对于每个任务有\(m\)道工序,每个任务的\(m\)道工序必须在不同的m台机器上依次完成才算把这个任务完成,在前\(i-1\)道工序完成后才能去完成第\(i\ ...

  7. bzoj 2850 巧克力王国 —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 只要暴力判断是否全选一个子树或全不选,如果都不是就进入查询: 要注意值有负,所以不是直 ...

  8. 通过能别的主机连接yum库

    本地有两台主机,分别为:192.168.2.131/24和192.168.2.132/24,本地yum源只能连接互联网: 这两台设备的虚拟机配置如下: 现有一台主机:172.16.254.88/16可 ...

  9. 与input有关的一些操作

    单选 : 通过name指定为一组,只能选择一个  一组一个选项 <input type=" name="sex"/>男 <input type=&quo ...

  10. 关于redis,学会这8点就够了(转)

    1.redis是什么 redis是一种支持Key-Value等多种数据结构的存储系统.可用于缓存.事件发布或订阅.高速队列等场景.该数据库使用ANSI C语言编写,支持网络,提供字符串.哈希.列表.队 ...