我是靠谱客的博主 天真画板,最近开发中收集的这篇文章主要介绍指针的基础知识点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.什么是指针
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。
2.指针的大小
指针的大小在32位平台是4个字节,在64位平台是8个字节。
因为在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。这就涉及到内存还有编址了。
下面是一个常见的面试问题:

/*写一个程序判断大小端*/
#include<stdio.h>
int Is_little()
{
 int a = 1;
 char *p = (char *)&a;
 if (*p == 1)
 {
  return 1;
 }
 return 0;
}
int main()
{
 int ret = Is_little();
 if (ret)
 {
  printf("小端n");
 }
 else
 {
  printf("大端n");
 }
 return 0;
}

3.指针的类型

不同类型的指针,解引用所访问的内存字节大小不一样。
char* 类型的指针是为了存放 char 类型变量的地址;short* 类型的指针是为了存放 short 类型变量的地址; int* 类型的指针是为了存放 int 类型变量的地址; void*不能解引用,但是可以接受任何类型的地址。
指针的类型决定了指针向前或者向后走一步有多大(距离)。
指针的类型决定了对指针解引用的时候有多大的权限(能操作几个字节)。

4.指针的运算
只有两种情况数组名不表示数组首元素的地址:(1)sizeof(数组名)表示整个数组的字节大小;(2)&数组名 表示整个数组的地址。
注意区分:arr+1 数组首元素的地址+1
&arr+1 整个数组都加1
指针-指针:这两个指针指向同一块内存才有意义
指针的加法:+或者-几个字节取决于指针的类型
标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。

5.指针和数组
数组名表示的是数组首元素的地址
p+i 其实计算的是数组 arr 下标为i的地址。

[]自带解引用。p[i]=*(p+i)

数组指针:(*p)[6] 指向数组的指针
指针数组: int * arr[6] 存放指针的数组

6.二级指针
int a=10;
int *pa=&a;
int **ppa =&pa;
**ppa 先通过 *ppa 找到 pa ,然后对 pa 进行解引用操作: *pa ,那找到的是 a

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

最后

以上就是天真画板为你收集整理的指针的基础知识点的全部内容,希望文章能够帮你解决指针的基础知识点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部