C指针和数组
一、指针
指针就是地址,指针变量是用来存放地址的变量,把谁的地址存放在指针变量中,就说此指针变量指向谁。
二、数组
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指针和数组的更多相关文章
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- 11-C语言指针&一维数组&字符串
一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...
- 指针与数组的区别 —— 《C语言深度剖析》读书心得
原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- 指针 与 数组 以及 a 与 &a的区别
指针 与数组 并没有什么关系, 指针就是指针,指针变量在32位系统下,永远占4个byte,其值为某一个内存的地址,指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到; 数组 ...
- c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针
1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 转: 浅谈C/C++中的指针和数组(二)
转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- C语言指针与数组的定义与声明易错分析
部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...
随机推荐
- [中英对照]Device Drivers in User Space: A Case for Network Device Driver | 用户态设备驱动: 以网卡驱动为例
前文初步介绍了Linux用户态设备驱动,本文将介绍一个典型的案例.Again, 如对Linux用户态设备驱动程序开发感兴趣,请阅读本文,否则请飘过. Device Drivers in User Sp ...
- mysql在查询结果列表前添加一列递增的序号列(最简)
SELECT @rownum:=@rownum+1 AS 序号, t_user.* FROM t_user ,(SELECT @rownum:=0) r -- 最简写法1 更多写法供参考: ① ...
- 令狐冲和TCP/IP协议的第三层协议的关系(经典)
今天突然想起来去看了看我以前在csdn的博客,发现一篇以前一直被奉为经典的文章,哈哈,再转过来和大家看看: 令狐冲十四岁那年进入华山,那年岳琳珊八岁,岳不群白天给两人指点剑法 ...
- Elasticsearch集群和索引常用命令
https://www.cnblogs.com/pilihaotian/p/5846173.html REST API用途 ES提供了很多全面的API,大致可以分成如下几种: 1 检查集群.节点.索引 ...
- 常用命令(Linux、Android、adb)
1. Linux 2. Android 1. pm (package Manager) 1). 安装APK(一般不使用,用adb我感觉更好) pm install -r /data/card/Ap ...
- python36异步任务 获取ip地址的地理位置
# encoding: utf-8 import asyncio import requests import functools url = "http://ip.zxinc.org/ap ...
- DataGridView 直接修改数据操作
DataGridView单元格进入编辑模式的方法: 双击或者f2: EditCellOnEnter 属性设为True,对DataGridView进行配置,当用户移动到该单元格后,该单元格可立即切换到编 ...
- Java基础之JDK的下载与安装
做Java开发已经很长一段时间了,最近在回顾Java的基础知识,感觉好多都是知道这个概念,能说个皮毛,但是往深了说又不知道怎么说,所以打算对Java从头做一个回顾,算是对自己所学知识的一个巩固和深入了 ...
- 系统分析与设计 homework-1
1.软件工程的定义 软件工程是将系统化.规范化.可度量的方法应用于软件的开发.运营和维护上,也就是将工程方法应用于软件上,并对这些方法的研究. 2.软件危机(software crisis) 软件危机 ...
- MVC 导出Execl 的总结几种方式 (一)
在ASP.NET 中导出Execl 表格有很多方式,有利有弊,就是看自己怎么使用了:下面就是自己总结了几种导出Execl 方式的,仅供参考. 导出Execl 的原理都是一样的,其实都是将数据整合成ta ...