ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

指针与函数,数组

2021-02-23 21:30:33  阅读:124  来源: 互联网

标签:函数 int ++ 地址 pa 数组 指针


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 //它是一个指针变量 

标签:函数,int,++,地址,pa,数组,指针
来源: https://blog.csdn.net/qwershibojia/article/details/114003190

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有