C语言指针

本文详细介绍了C语言中指针的基础知识,包括指针的定义、初始化、运算(尤其是指针与地址、对象的区别),以及指针与一维和二维数组的关系,特别是行指针的概念。
摘要由CSDN通过智能技术生成

在C语言中内存单元的地址称为指针,专门用来存放地址的变量,成为指针变量。

指针一般形式

        <存储类型> <存储变量> *<指针变量名>;

        auto        int        *        pName;

指针的初始化

        <存储类型> <数据类型> *<指针变量名>=<地址名>;

        例如:

                int a,*pa = &a;

                把a的地址作为初值赋给了int型的指针pa

                int *pa =&a; == int *pa; *pa = &a;两个是一样的

px  *px  &px区别

        设px为一个指针,则

        px —— 指针变量,它的内容是地址量

        *px —— 指针指向的对象,它的内容是数据

        &px —— 指针变量占用的存储区域的地址,是个常量

指针运算

        两指针相减运算

                px - py 运算的结果是两指针指向的地址位置之间相隔数据的个数,因此,两指针相减相减不是两指针持有的地址值相减的结果;

                两指针相减的结果不是地址量,而是一个整数值,表示两指针之间相隔数据的个数。、

注意指针的当前值

        这个程序中y=(*--p)++  虽然后面有++ 但是是先赋值后加加的 所以为5

        先前的值给y =5 ,实际现在a[0] = 6

指针与数组

        一维数组的数组名代表数组的起始地址

        数组的指针是指数组在内存中的起始地址,数组元素的地址是指指针元素在内存中的起始地址

        他们四个可以实现完全相同的功能

        数组名是常量不可改变,但是如上 加减并没有改变 所以可行

        但是本质是不同的,指针的变量是地址变量,数组的指针是地址常量

指针与二维数组

        在a[2][3]中,a[0] 和 a[1] 表示一个常量,表示为数组名

        可以把二维数组看作多个一维数组组成         a和a+1是一行一行走的,隔着8个字节

        而a[0],a[0]+1隔着4个字节 也可以写成这样:

行指针(数组指针)

        存储行地址的指针变量成为行指针变量

        <存储类型> <数据类型> (*<指针变量名>) [表达式];

        int a[2][3]; int (*p) [3]

#include <stdio.h>

int main(int argc,char *argv[]){

    int a[2][4] ={{1,2,3,5},{6,7,8,0}};
    int (*p)[4],i,j;

    p=a;

    for(i=0;i<2;i++){
        for(j=0;j<4;j++){
            printf("%d %d %d %d",p[i][j],a[i][j],*(*(a+i)+j),*(*(p+i)+j));
            puts(" ");
        }        
    }   
}

 

        四种不同的写法都可以遍历二维数组

        后面两个为 刚开始加i行,加j为走j列,里面加*为改变指针性质,外面*为取值

  • 43
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值