学C的第十七天【指针初阶: 1. 指针是什么?;2. 指针和指针类型;3. 野指针;4. 指针运算】1

简介: 1. 指针是什么? (1). 指针是内存中一个最小单元的编号,也就是地址 (2). 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量

 

1. 指针是什么?

                             

(1). 指针内存中一个最小单元的编号,也就是地址

                           

(2). 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

                   

总结:指针就是地址,口语中说的指针通常指的是指针变量

5e90376dea684a32a4bd8f337a309c6f.png

1.1 * 指针变量

                         

可以通过 &(取地址操作符)取出变量的内存起始地址,可以把地址存放到一个变量中,这个变量就是指针变量

                   

#include <stdio.h>
int main()
{
  int a = 100; //在内存中开辟一块空间
  int* pa = &a; //取出变量a的地址,使用&(取地址操作符)
  //a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址
  //放在pa变量中,pa就是一个指针变量
  // pa 是专门用来存放地址(指针)的,
  // int * 可以分开理解
  // * 告诉我们 pa 是 指针
  // int 告诉我们 pa 指向的 a 是 int类型
  printf("%p", pa);
  return 0;
}

98d18e3b1e9d416abaee4e70a0a1afb1.png

总结:

         

指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理

1.2 * 内存单元的编址

           

查看往期文章:

学C的第五天(初识指针,内存产生内存单元地址过程,指针函数介绍和其大小;结构体补充)_高高的胖子的博客-CSDN博客

                     

总结:

                       

(1). 在32位机器上,地址是32个0或1组成的二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应是4个字节

(2). 如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。

       

(3). 指针变量是用来存放地址的,地址唯一标示一个内存单元        

(4). 指针的大小32位平台是4个字节,在64位平台是8个字节

2. 指针和指针类型

                   

指针的定义方式:

           

type + *

(如:int类型 -- int * 变量)

             

不同 类型* 的指针是为了存放 该类型类型变量地址

(如:char* 类型 的指针是为了存放 char类型变量地址

                     

2.1 * 指针类型的意义(不同指针类型访问的对象的大小

             

int* 类型 的指针变量:

//指针类型的意义
#include <stdio.h>
int main()
{
  int a = 0x11223344; //0x开头的是16进制数字
  int* pa = &a;
  *pa = 0;
  return 0;
}

image.png

char* 类型 的指针变量:

//指针类型的意义:char*
#include <stdio.h>
int main()
{
  int a = 0x11223344; //0x开头的是16进制数字
  char* pa = &a;
  *pa = 0;
  return 0;
}

66e32c685d5041b48ce18d88234b9e28.png

总结:

                           

对于指针变量:        type        *        p;

               

(1).   *  :说明 p 是指针变量

(2). type:说明 p 指向的对象类型

             

(3). typep 解引用的时候访问的对象的大小sizeof(type) --> 重点!

(4). 指针的类型决定了指针解引用时有多大的权限(能操作几个字节                

2.2 * 指针类型的意义(指针 +- 整数)

           

//指针类型的意义2:
#include <stdio.h>
int main()
{
  int a = 0x11223344; //0x开头的是16进制数字
  int* pa = &a;
  char* pc = &a;
  printf("%p\n", pa);
  printf("%p\n", pc);
  printf("%p\n", pa+1);
  printf("%p\n", pc+1);
  return 0;
}

e70ec827303b4537a27a99800b67709e.png

总结:

               

指针的类型决定了指针向前或者向后走一步有多大(步长)

相关文章
|
2月前
|
存储 C语言
文件的类型指针
文件的类型指针
15 0
|
2月前
|
编译器 C语言
void的指针类型
void的指针类型
10 0
|
2月前
|
存储 程序员 C++
在C++编程语言中指针的作用类型
在C++编程语言中指针的作用类型
16 0
|
10天前
|
存储 人工智能 编译器
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
19 1
|
15天前
|
存储 安全 Java
Go语言学习10-指针类型
【4月更文挑战第11天】本篇 Huazie 向大家介绍 Go语言的指针类型
10 2
Go语言学习10-指针类型
|
2月前
|
C语言
Void 指针类型
Void 指针类型
9 0
|
2月前
|
存储 C语言
C语言指针类型和空类型详解
C语言指针类型和空类型详解
27 0
|
2月前
|
存储 C++
在C++语言中函数指针的作用类型
在C++语言中函数指针的作用类型
11 0
详解7道经典指针运算笔试题!
详解7道经典指针运算笔试题!
|
2月前
|
安全 程序员 编译器
了解野指针与assert断言 拿捏指针的使用!
了解野指针与assert断言 拿捏指针的使用!