栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】指针(一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】指针(一)

一、

1.一个内存单元占一个字节

2.指针是个变量,用来存放内存单元的地址

3.int* p = &a; //p就是指针变量

4.在32位机器上,指针变量占4个字节。64位机器上,占8个字节

二、

1.不管指针类型是什么,指针变量的大小都是4个字节或8个字节。那指针还分类型做什么呢?

2.指针类型是为了指明指针进行解引用操作时,可访问空间的大小(可以访问几个字节)

int* p;  //可以访问4个字节

char* p;  //可以访问1个字节

double* p;  //可以访问8个字节

3.指针类型决定了指针+1或-1时,向后或向前移几个字节(指针的步长)

int* p;

p+1;  //p向后移四个字节

4.野指针:指针指向的位置是不可知的,随机的。

5.可能导致指针变野指针的情况:

        ① 局部指针变量不初始化,会导致指针变成野指针:int* p;

        ② 指针越界访问

        ③ 指针指向的内存空间被释放后,指针就会变成野指针

int* fun()

{

        int a = 10;

        return &a;

}

int* p = fun();  //这里a的内存已经被释放了,p其实已经是野指针了。

*p = 20;

三、

1.指针的运算:

        ① 指针+-整数

        ② 指针-指针:得到的是两指针中间的元素个数,小地址-大地址得到的是负数。注意:一般是同一块空间的地址相减,比如同一个数组。

求字符串长度

int Mystrlen(char* str)

{

        //start指针指向首元素的地址

        char* start = str;

        //利用循环使end指针指向最后一个元素,也就是结束标志符

        char* end = str;

        while(*end != '')

        {

                end++;

        }

        //返回指针间的元素个数,也就是字符串的长度

        return end - start;

}

*--p = 0;  //先算--,再算*p = 0

2.在用指针写for循环条件时,应注意不要用第一个元素之前的地址来比较(p不要和p3比较),但可以用最后一个元素之后的地址比较(p1可以和p2比较)。

 四、

1.通常数组名是首元素的地址,但是:

        ①&arr,数组名表示整个数组的地址。&数组名,取出的是整个数组的地址

        ②sizeof(arr),数组名表示整个数组。sizeof(数组名),计算的是整个数组的大小

 2.二级指针

int a = 10;

int* pa = &a;

int** ppa = *pa;  //ppa就是二级指针,ppa的类型是int**,其中int*表示ppa指向的是int*类型的变量,*表示ppa是指针

**ppa = 20;  //等价于*pa = 20; a = 20;

3.指针数组和数组指针

① 指针数组 - 本质还是数组,是存放指针的数组,数组元素都是指针

int a = 10;

int b = 20;

int c = 30;

int* arr[3] = {&a, &b, &c};  //指针数组arr,将abc三个变量的地址放入数组里

*(arr[0]) = 20;  //等价于a = 20;

② 数组指针 - 本质还是指针 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号