一、指针

指针就是地址,指针变量是用来存放地址的变量,把谁的地址存放在指针变量中,就说此指针变量指向谁。

二、数组

1.一维数组

一维数组名代表数组首元素的地址,因此 *a=a[0];

&:取地址运算符。&a 是变量 a 的地址

*:指针运算符,*p 代表指针变量p指向的对象

    a+i  = &a[i];
  *(a+i) =  a[i]; //两者无条件等价

2.二维数组

可以认为二维数组由多个一维数组组成。

C语言规定:数组名代表数组首元素地址

a代表的是第0行的首地址,a+1代表第1行的首地址。

a+1指向a[1],或者说a+1的值是a[1]的首地址

a[0],a[1],a[2]是一维数组名

a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0]

a[1]代表一维数组a[1]中第0列元素的地址,即&a[1][0]

a[2]代表一维数组a[2]中第0列元素的地址,即&a[2][0]

因为,a[0]和*(a+0)等价,a[1]和*(a+1)等价,a[i]和*(a+i)等价

所以,a[0]+1和*(a+0)+1都是&a[0][1],*(a[0]+1)、 *(*(a+0)+1)、*(*a+1)都是a[0][1]的值

a[1]+2和*(a+1)+2都是&a[1][2],*(a[1]+2)、 *(*(a+1)+2)、                 都是a[1][2]的值

a[i]+j和*(a+i)+j都是&a[i][j],  *(a[i]+j)     *(*(a+i)+j)、                   都是a[i][j]的值

三、字符指针和字符数组

1.含义不同。字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是字符首地址。

2.赋值方式不同。可以对字符指针变量赋值,但不能对数组名赋值。

例如:

char *a;  //a为字符指针变量
a=“This a C Program”; //将字符串首元素地址赋给指针变量
]; //定义字符数组str
str[]="Sublime"; //企图把字符串赋给数组中各元素,错误

所以数组只能初始化的时候赋值:

]="Sublime";

四、可变格式输出函数。

 #include <stdio.h>
 int main(int argc, char const *argv[])
 {
     ,b=;
     char *format="a=%d,b=%d\n";
     printf(format,a,b);
     ;
 }

只要改变指针变量format所指向的字符串,就可以改变输入输出的格式。

 五、指针数组和多重指针

1.指针数组

一个数组,若其元素均为指针类型数据,成为指针数组。比较适合用来指向若干个字符串。

定义一维指针数组的一般形式为:类型名 *数组名[数组长度];

  注意下边两者的区别:

];      // 指针数组
];     // 这是指向一维数组的指针变量

2.多重指针

C指针和数组的更多相关文章

  1. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  2. 11-C语言指针&一维数组&字符串

    一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...

  3. 指针与数组的区别 —— 《C语言深度剖析》读书心得

    原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...

  4. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  5. 指针 与 数组 以及 a 与 &a的区别

      指针 与数组 并没有什么关系,   指针就是指针,指针变量在32位系统下,永远占4个byte,其值为某一个内存的地址,指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到;   数组 ...

  6. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  7. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  8. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  9. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  10. C语言指针与数组的定义与声明易错分析

    部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...

随机推荐

  1. 如何快速将文本中的tab更换成逗号(图文详解)

    不多说,直接上干货! 现有一份数据如下. 下载日志数据并分析 到搜狗实验室下载用户查询日志 1) 介绍 搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点 ...

  2. Idea查看代码相关技巧

    (1)查看类中的属性与方法快捷键  Alt+7 (2)查看方法被调用 在方法上右键find usages (3)查看方法说明  Ctrl+Q

  3. javac的访问者模式2

    (5)Printer /** * A combined type/symbol visitor for generating non-trivial(有意义的) localized string * ...

  4. QT下载地址大全

    1. 所有Qt版本下载地址: http://download.qt.io/archive/qt/ 2. 所有Qt Creator下载地址: http://download.qt.io/archive/ ...

  5. 解读MySQL的慢日志

    完整的慢日志格式一般如下: # Time: :: # User@Host: db_user[db_database] @ localhost [] # Query_time: Rows_examine ...

  6. C# 工具类之数据库链接

     一.SQL Server 相关 /// <summary> /// 数据库的通用访问代码 /// 此类为抽象类, /// 不允许实例化,在应用时直接调用即可 /// </summa ...

  7. mongdb启动报错

    2018-08-19T12:25:31.707+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1 ...

  8. hdu 2199 Can you solve this equation? 二分

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  9. jenkins 参数化构建过程

    构建项目时我们可能需要切换到另一个分支编译,或者说每次编译版本都要加1,这时候我们可以改配置或者改脚本文件,这显然不是一个好的方式,那么如何能在编译前让用户输入参数呢?jenkins早就为我们考虑好 ...

  10. BZOJ4671:异或图

    传送门 直接求连通的不好做,考虑容斥 设 \(g_i\) 表示至少有 \(i\) 个连通块的方案数,\(f_i\) 表示恰好有 \(i\) 个的 那么 \[g_x=\sum_{i=x}^{n}\beg ...