指针与数组
来源:互联网 发布:淘宝怎样用信用卡支付 编辑:程序博客网 时间:2024/06/08 00:29
指针与数组
指针与一维数组
数组的指针是指数组在内存中的起始地址,即第一个数组元素的地址.
一维数组的数组名代表一维数组的指针(起始地址)
[ ] 又叫做变址运算符
a[i] <=> *(a+i) 在计算机内部实现的时候,数组下标都会转化为地址。
若地址变量px的地址值等于数组指针x(指针变量px指向数组的首地址),则:
x[i]、*(px+i)、 *(x+i) 和px[i]具有相同功能的功能:访问数组第i+1个数组元素。
数组元素访问过程中,数组地址与指针变量具有相同的访问效果
不同: 地址变量是变量。
数组地址(数组名)是常量,不能自加或自减
地址变量与数组的赋值
1. int *p = &a[0];
- int *p;
p = &a[0];
3. int *p = a;
小结:
1. p+i和a + i就是a[i]的地址, 指向a数组的第i个元素。
2. *(p+i) 或*(a+i) 是取a[i]元素的值。
3. 指向数组的地址变量也可以带下标 p[i]和*(p+i)和*(a+i) 等效。
指针与数组常见操作
经典例子:
一维字符 指针数组ps[5] 里面存放着字符串首地址
char *ps[5] = {“beijing city”, “New York”, “London”, “Paris city”, “Moscow city”};
定义一个指针变量,并指向数组首地址;
char **pps = ps; 那么ps指向 指针数组的首地址
指针与二维数组
定义一个二维数组a,有3行4列
int a[3][4] = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };
a 是数组名, a数组包含3行,即3个元素,分别是a[0]、a[1]、a[2]。每个元素同样是一个一维数组,包含4个元素,a[0][0], a[0][1], a[0][2], a[0][3].
a[0] 是一维数组名,代表的是第一行的第一个元素的首地址,a[0] = &a[0][0].
a[1] 是一维数组名, 代表的是第二行的第一个元素的首地址, a[1] = &a[1][0].
注意点:
a + 1 表示的是第一行首地址, a表示是行数组的地址变化。
a[1] 表示的是第一行0列的地址 &a[1][0], a[1] = * (a + 1); a表示的是当前行的首地址变化
二维数组的行地址、列地址
行地址:二维数组名是个特殊的地址,参与运算时以行为单位移动,因此被称为是行地址。如int a[2][3], a代表的是第一行的首地址,a + 1代表第二行的首地址。
列数组:int *p = a;
printf(“%d”, *(p+i) );p+i 相当于移动了i列, 因此指针p为列指针。
综上:
a+1与a[1]表示的地址值是相同的, 但含义是不同的, a+1 是序号为第一行的首地址, a[1] 或 *(a+1), &a[1][0] 指向1行0列元素。
二维数组名是指向行的,在行指针前面加上*, 就可以转换为指向列的指针。
eg:
a和a+1是指向行的地址;
*a和*(a+1)是指向列的指针。
反之,在列指针前面加上&,就可以转换为行指针。
eg:
a[0] 指向0行0列的列元素指针, &a[0] 与*(a + 0)
指向元素的指针变量和指向数组的指针变量(数组指针)比较
- 指向数组元素的指针变量定义和普通指针变量相同
- 指向由m个元素组成的一维数组的指针变量:
对数组指针赋值:a为二维数组名:
p = a; 或 p = &a[0];
int (*p)[4],4表示一维数组长度,且*p两端的括号不可省略, 方括号的优先级高, int *p [4], p会先和[ ] 组成数组 p[4], 然后再和*组成 指针数组(地址数组);
p指向的是行的起始地址, *p 相当于p[0]。
字符串与字符指针
C中没有字符串数据类型。通常借助字符数组来存储字符串。
字符指针可以存储字符串的起始地址,即指针会指向字符串第一个字符。
字符串指针初始化,可直接把内存中字符串的首地址赋予指针变量。
eg:
char *s = “Welcom!”; //相当于const char *s = “welcome!”。字符串常量是存放在常量区的,不可修改。
指针数组
指针数组即这个数组元素里存放的是地址(相同存储类型和数据类型的地址集合)
说明形式:
<存储类型> <数据类型> *<指针变量数组名> [<长度>]
int *p[2];
char *c[9];
指针数组名含义:
表示这个数组的存储首地址,即指针数组名为数组的地址。(和常规的数组相同,不同的是这个数组存储地址)。
指针数组中的元素就是地址,要取得元素对应的值,直接对数组元素取值即可,或对数组名**(p+i)取值。
指针数组元素就是地址,数组名代表数组的起始地址, 数组名是地址的地址,即二级指针。
阅读全文
0 0
- 指针:指针与数组
- 指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组 与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- deepmind_lab 里面有大量的MD3文件 简单说明md3是什么
- python内置函数【chr(i ),ord(c )】
- rocksdb线程池设计
- 【小白的CFD之旅】11 敲门实例【续】
- 窗口作业
- 指针与数组
- 6.18九九乘法表
- 插入排序
- 连续创业者:工作狂不是骄傲,平衡工作和生活才最好
- header() 函数向客户端发送原始的 HTTP 报头。
- Linux 4.14 特性汇总
- jenkins--10--概述
- 蓝桥杯 算法训练 暗恋
- 使用Apple Diagnostics帮助检查Mac的硬件问题