C语言学习中整理的知识

来源:互联网 发布:minecraft0.15js 编辑:程序博客网 时间:2024/05/29 17:11

说明:大家好,我所写的东西是我在学习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.
“`

原创粉丝点击