C语言学习中整理的知识

说明:大家好,我所写的东西是我在学习C语言的过程中遇到的一些问题,这些问题我碰到之后觉得重要会记录下来,理解并用自己的话去解释,有些不对的地方还望大家指正。
另外这些都是我平时做题时或者看书时想到的,可能不是按部就班的,没有先后顺序,望大家见谅。

一维数组与指针之间的关系;

假如指针变量 px 指向数组 x[] 的首元素,则;

  1. x[i], * (px+i), * (x+i), px[i]具有完全相同的功能,即访问数组第 i+1 个元素。

    首先, x[i] <==> * (x+i) 是无条件等价的,指针变量指向数组 x[] 的首元素==> px = x;
    那么,px[i] == x[i] , * (px+i) = * (x+i).
    所以以上4中方式的表达功能是一样的。

  2. 指针变量 px 和数组名 x (也叫数组的指针)有着本质的区别。

    指针变量是地址变量,而数组的指针是地址常量,来看几个例子;

    x++;
    px++;
    x+1;

    在以上3条语句中
    x++; 是错误的,因为数组的指针是地址常量不能做++运算;
    px++; 是正确的,px为指针可以++,向地址大的方向移动,且自加一次移动的地址为所指向数据类型的字节数。
    eg:若指针为 int 型,px++,地址往大的方向移动 4 位;
    x+1; 是正确的,因为 x+1; 执行之后并没有改变 x 的值。

#include <stdio.h>
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7};
int * p;
p = a;
a+1;
p++;
printf("%d\n",p[1];
return 0;
}

个程序的结果是 3
首先指针 p 指向了数组 a[] 的首元素,也就是1;
然后 a+1; 这句没什么意义,因为数组名 a 是常量;
接着 P++;指针往后移了一次,指向了 a[1],此时 a[1] = p[0];
最后打印出 p[1],p[1]相当于 p[0+1],也就是 a[1+1] == a[2],所以结果是3.
“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值