指针与函数,数组

本文详细介绍了C语言中指针与函数的关系,包括指针作为函数参数和返回值的使用,以及指针的运算规则。强调了不能将局部变量地址作为返回值,只能返回静态变量或未释放内存的地址。此外,还阐述了指针与数组的交互,如数组名是常量指针,不能被修改,而通过指针访问数组元素的方法及其等价表达。最后,总结了数组通过指针访问的各种方式,并对比了数组名与指针的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.指针与函数
1.1指针作为函数的形参
如果在子函数中拿到了a b 变量的地址,对a b 为所欲为
总结:要子函数中改变变量本身的值,要将变量的地址当作参数传递给子函数
1.2.指针作为函数的返回值
就是函数的返回值是一个指针,这个返回的指针是有限定的
不能将函数内局部变量的地址作为返回值
只能返回未释放的变量对应内存的地址
静态局部变量
全局变量
静态全局变量
2.指针的运算
指针可以和一个整数做加减运算,简称地址运算,不会讨论的乘除运算,没有意义。
指针运算的特点
1)如果是char*或者unsigned char *指针 +1,实际加上去的值就是1
例如: char c = ‘m’;
char *pa = &c; //假如c的地址为0x1000;
pa++; // pa = pa+1; //0x1001
2) 如果是short *或者unsigned short *指针 +1, 实际加上去的值是2
short n = 123;
short *pa = &n; //假如n变量的地址为0x1000
pa++; //0x1002
3) 如果是int *或者unsigned int *指针 +1, 实际加上去的值是4
int i = 0;
int pc = &i; //如果i变量的地址为0x1000
pc += 1; //0x1004
普通变量+1 就是+1
int a=100;
a +=1 ; //101
规律:指针变量做加减运算和其指向数量类型密切相关
pa + 1 实际加上去的值 1
sizeof(pa指向的数据类型)

    pa 如果指向是int  +4
                short +2
                char  +1
                float +4
                double +8            

3.指针与数组
定义并初始化一个数组
int a[5] = {1,2,3,4,5};

  1. 数组名称 a 其实就是一个指针,就是数组的首地址
    2)数组名称 a 它是一个常量指针,不能再次赋值
    5= 100;//语法错误的

    普通的指针变量 pa;
    pa++;//可以的 因为他是变量 可以修改
    a++; //相当于5++ 语法上报错
    3)a[2],它表示是数组中第2个元素
    &a[2], 它表示的就是数组中第2个元素的地址
    a+2, 它也表示数组中第2个元素的地址
    // +2 实际加上去的值 2*sizeof(int)

    a=a+2; //不可以 语法报错

  2. a[2] *&a[2] *(a+2) 三者之间是等价的

    []运算符本质上做了两步运算,gcc对其进行翻译时
    第一步:先根据数据名和下标获取到第2个元素的首地址 a+2
    第二步:根据获取到的第二个元素的地址 获取它的值 *(a+2)

总结:数组既可以通过数组名加下标方式访问
也可以通过指针方式访问
访问方式: a[2] *(a+2) *(pa+2) pa[2] 之间是等价的
例如:
int a[5] = {1,2,3,4,5};
int *pa = a; //pa中保存了数组的首地址

    *(pa+2) = 100; 等价于 a[2]=100;
    
    区别在于:
        a) a是常量 不支持修改其值  = ++ --不支持
           a = 0xbfc000; //错误
           a++; //错误 常量不改其值  5++
           --a; //错误的 常量不能改
           pa 是变量,其值是可以修改的
        b) a代表的是数组
           sizeof(a) 得到的是整个数组一共占据内存空间大小
           pa本身是一个指针变量 其中存储了数组a的地址
           sizeof(pa) = 4 //它是一个指针变量 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值