【C语言入门】之初识指针 您所在的位置:网站首页 c语言用指针比较字符串大小 【C语言入门】之初识指针

【C语言入门】之初识指针

2023-03-14 14:48| 来源: 网络整理| 查看: 265

C语言入门之初识指针指针指针是什么指针和指针类型野指针指针运算1.指针±整数2.指针-指针3.指针的关系运算二级指针指针和数组结尾

指针

新的一天又来了,快跟着我一起看看指针的内容吧,这里只是让大家初识一下指针,关于指针的知识可不止这些。

指针是什么

指针也就是内存地址 ,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间 长度也不同。

内存: 内存 指针:

指针就是个变量,存放内存单元的地址(编号)。

int a = 10;int *p = &a;

1.一个小的单元是多大? 一个字节 2.如何编址? 1).在32位的机器上,地址是32个0或者1组成的二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。 2).那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。

总结: 指针是用来存放地址的,地址是唯一标示一块地址空间的。 指针的大小在32位平台是4个字节,在64位平台是8个字节。

指针和指针类型

指针就是变量,变量有不同的类型。

char *p = NULL;//能够访问1个字节int *p = NULL;//能够访问4个字节short *p = NULL;long *p = NULL; float *p = NULL; double *p = NULL;//能够访问8个字节

#include #include int main(){int a = 0x11223344;int* pa = &a;char* pc = &a;printf("%p\n",pa);printf("%p\n",pa+1);printf("%p\n",pc);printf("%p\n",pc+1);return 0;}

总结: 1.指针的类型决定了指针向前或者向后走一步有多远(指针的步长)。 2.指针类型决定了指针进行解引用操作的时候有多大的权限(能够访问空间的大小)。

野指针

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)

1.指针未初始化 局部变量不初始化,默认是随机值 2.指针越界访问 3.指针指向的空间释放

如何规避野指针?

1.指针初始化 2.小心指针越界 3.指针指向空间释放及时置NULL 4.指针使用之前检查有效性

指针运算 1.指针±整数

#include #include int main(){int arr[10] = {1,2,3,4,5,6,7,8,9,10};int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);int* p = arr;for (i = 0;i sz; i++){printf("%d",*p);p = p + 1;}return 0;}

1.指针±整数 ,这种形式只能用于指向数组中某个元素的指针。

2.这类表达式的结果类型也是指针。

3.对一个指针加1使它指向数组中的下一个元素。

2.指针-指针

#include #include int main(){int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10};int *p = &arr[2];int *t = &arr[5];printf("%d\n", *p - *t);return 0;}

1.当两个指针指向同一块空间的时候,一个指针才可以减去另一个指针

2.如果两个指针所指向的不是同一块空间,那么它们之间相减的结果是无法预知的。

3.指针的关系运算

#include #include #define N_VALUES 5int main(){float values[N_VALUES];float *p;for (p = &values[N_VALUES]; p > &values[0];){*--p = 0;}return 0;}

标准规定: 允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。

二级指针

指针的变量也是变量,是变量就有地址,指针变量的地址存放在二级指针中。

int a = 10;int *p = &a;int **pp = &p;

a的地址存放在p中,p的地址存放在pp中。 p是一级指针,而pp是二级指针。

指针和数组

数组名是什么? 数组名表示的是数组首元素的地址。 这俩种情况不是首元素地址: &数组名-数组名表示整个数组 sizeof(数组名)-数组名表示的是整个数组

例:

#include #include int main(){int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };printf("%p\n",arr);printf("%p\n",&arr[0]);//return 0;}

通过指针访问数组:

#include #include int main(){int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };int *p = arr; //指针存放数组首元素的地址int sz = sizeof(arr) / sizeof(arr[0]);int i = 0;for (i = 0; isz; i++){printf("%d ", *(p + i));}return 0;}

指针数组:本质是数组 存放指针的数组 数组指针:本质是指针

结尾

结尾

种下一颗树最好的时间是十年前,其次,是现在。当你觉得为时已晚的时候,恰恰是最早的时候。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有