ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【C】零基础教我学会c语言(十二)

【C】零基础教我学会c语言(十二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、void指针
  • 二.二级指针
  • 三.指针数组
  • 四.数组指针
  • 五.二维数组传参
    • 1.二维整型数组的传参
  • 总结

前言

难死我了


提示:以下是本篇文章正文内容,下面案例可供参考

一、void指针

主要用于存放内存空间地址
也用于函数传参,不同类型的指针可以通过转换为 void* 传参
(void* 就是设置一个没有类型的地址,里面可以放任何类型的数据)

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

二.二级指针

函数体内想修改函数体外指针变量值的时候,需要传递指针变量的地址,即二级指针

C语言指针数组传参需要传二级指针和长度

inta=100;int*p=NULL;int**q=NULL;p=&a;q=&p;printf("&a:%p\n",&a);//a的地址printf("&p:%p\n",&p);//存放p这个指针的地址printf("&q:%p\n",&q);//存放q这个指针的地址printf("=========================\n");printf("q = %p\n",q);//q放的是p的地址printf("p = %p\n",p);//p放的是a的地址printf("a = %d\n",a);//a的值,即100printf("=========================\n");printf("*q = %p\n",*q);//取q的值,即为p的地址printf("*p = %d\n",*p);//取p的值即a的地址printf("=========================\n");printf("**q = %d\n",**q);//取*q的值,即p所存的地址的值,即为a的值100

三.指针数组

本质上为一个数组,里面的数据类型为指针
定义:int *a[5]

定义数组a里有5个元素,占40个字节空间,每个元素都是int *型 C语言中字符串存储用字符型数组,操作字符串用指针 字符串数组的存储用二维字符型数组,操作字符串用指针数组

四.数组指针

本质上是指针,指向一个数组
定义:nt a[5] = {1, 2, 3, 4, 5}; int (*p)[5];

1.定义数组指针变量p,占8个字节空间,指向20个字节的指针

2.一维数组的数组名a,是指向数组第一个元素的指针常量,a可以理解为int *型,除以下2种情况
(1)sizeof运算时
对一维数组数组名&时,值不变,类型为指向整个数组的指针地址,就应该是元素总数*步长

a:数组第一个元素的首地址
&a:数组的首地址

(2)数组指针取*,值不变,类型为指向数组第一个元素的指针地址
都是指地址哦

五.二维数组传参

1.二维整型数组的传参

(1)传数组名和第一维长度(行)
int fun(int (*parray)[3], int len);
(这里的【3】指3列哦)
(2)在函数里的用法和在主函数里数组的用法是一模一样的,不用变换

二维数组和指针的关系

inta[2][3]={1,2,3,4,5,6};int*p=NULL;int(*q)[3]=NULL;p=&a[0][0];p=a[0];p=*a;q=a;a:指向数组一行元素的数组指针 a[0]:指向第一行第一个元素的指针 a[1]:指向第二行第一个元素的指针 访问第m行第n列元素的方式: a[m][n]*(a[m]+n)//加步长取值*(*(a+m)+n)//a加步长(一次加一列)先到m再加步长取值*(p+m*N+n)//p就是a0,a0一次加一个,先到m行再加步长取值*(*(q+m)+n)//q是a,一次加一列*(q[m]+n)//qm就是第m行q[m][n]//与a【m】【n】等价

总结

返回列表