C语言指针和数组

指针和数组

基本知识

数组名代表数组的首地址(两种特殊情况除外,一种是&arr,另一种是sizeof(数组名))(表示整个数组的大小)

sizeof(数组名)和sizeof(指针变量名)二者不可互换

a[i]实际上和*(a+i)访问的是同一个元素

指针的算术运算

p+j等价于&a[j],换一种方式访问数组元素

指针相减得到距离

//定义忽略
p=&a[i];
q=&a[j];
p-q=i-j;

指针与一维数组的关系

*(p+1)等价于a[i](首地址加偏移量)

不同点在于,p是指针变量,而a是指针常量

p++不是加1字节,取决于p的基类型

(*p)++和++(*p)

都是不可以连续访问的

输入

p++

输出

*p++

传递给函数的时候传递数组名或者指针

注:p+1实现不了连续访问的效果

指针与二维数组的关系

对于一个二维数组

a[i][j]
*(a+i)相当于a[i]
所以*(*(a+i)+j)就相当于a[i][j]

行指针

int (*p)[3];
p=a;
p+i就指向a[i]
*(p+i)+j就指向a[i][j]
取元素解引用

列指针(将p看成一维数组)

int *p;
p=a[0];//这一步相当于把a[0]看成一个整体
如果是int* p[3]那么表示存放指针的指针数组
(p+i*n+j);
或者p[i*n+j]

二维数组作函数参数

第二维不可省略

行列指针作函数参数

行指针

input(a,3,4)
void input(int (*p)[N],int m,int n);

列指针

input(*a,3,4)
voidinput(int *p,int m,int n);

字符数组和字符指针

数组名是常量,它的值不可以被修改,但是数组的内容是可以被修改的。

字符指针是一个变量,它的值可以被修改,但是由于其指向的是常量空间中的字符串,(如果指向字符数组就可以修改了)所以它所指向的空间中的内容是不能被修改的,这就是字符指针和字符数组的不同之处

对于字符指针解引用可以

指针数组和数组指针

指针数组

本质是数组,作用是存放指针;

int* arr[3]={&a,&b,&c};(这就是一个整型指针数组)

取元素的时候*(arr[i]);

数组指针

数组指针第一种指针,它表示指向数组元素首地址的一个指针

char (*pa)[4];

它和普通的指向数组首地址的指针的区别在于,对它进行加减操作移动的单位是一个数组,而普通的指向数组首地址的指针移动的单位是一个数组元素

指针数组和数组指针的根本区别就是运算符的优先级问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值