云计算百科
云计算领域专业知识百科平台

C语言学习之指针数组和数组指针

今天学习了指针数组和数组指针,相较于之前学习过指针来讲,今天学习的算是之前从未接触过的新知识,算是知识上的盲区,指针变来变了去,对概念的理解也逐渐的模糊了,所以接下来的时间要好好去琢磨这一块的知识,争取能啃下来这块硬骨头

1.void指针

        1.主要用于存放内存空间地址

        2.函数传参,不同类型的指针可以通过转换为void*传参

将内存地址为0x12345678的空间赋值为0x11223344
*((int *)((void *)0x12345678) = 0x11223344;

2.二级指针

        1.函数中想要修改函数外的指针变量的时候就要使用二级指针

        2.指针数组传参要传二级指针和长度

#include<stdio.h>

void fun(char **ptemp)
{
*ptemp = "hello";
return;
}

int main(void)
{
char *p = NULL;
fun(&p);
printf("%s\\n",p);

return 0;
}

注:这段代码定义的函数想要修改函数外的指针变量就要使用二级指针,否则在定义函数形参的时候定义指针类型的形参就是值传递,形参是实参的副本,实参永远得不到改变

3.指针数组

        1.指针数组是数组,数组指针是指针

     

int *a[5]
//定义了一个int类型的指针数组,里面存放了五个指针,每个指针8个字节,这个数组占40个字节

        2.字符串存储用字符型数组,操作字符串用指针

        3.字符串数组存储用二维字符型数组,操作字符串数组用指针数组

4.数组指针

        1.指针指向一个数组

int a[5] ={1,2,3,4,5};

int (*p)[5];

定义了一个数组指针,占8个字节空间,指向20个字节的指针

注意:一维数组的数组名是指向数组第一个元素的指针常量

         sizeof运算时不能理解为int*型

         对一维数组&时,值不变,类型升级为指向整个数组,对数组指针取*运算时,值不变,类型降级为指向数组的第一个元素的指针

5.二维数组传参:

        1.二维数组传数组名和第一维长度

int fun(int (*p)[3],int len)

可以理解二维数组就是多个一维数组组成

二维数组的数组名就是指向第一行的数组指针,对a取*就是指向第一行第一列的指针,再对a取*就是对第一行第一列的元素进行元素访问,其次就是p[i]等价于*(p+i)

赞(0)
未经允许不得转载:网硕互联帮助中心 » C语言学习之指针数组和数组指针
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!