简单了解指针

简介: 简单了解指针

指针无疑是C语言的精髓 - 要学习的指针,就要了解内存

一、内存是怎么编号的?

其实我们在讨论计算机时,计算机有32位/64位等机器

32位 - 32位地址线(物理线) - 通电(正负电) - 1/0

64位

拿32位来说可能就有2^32个以下的序列

00000000000000000000000000000000

01111111111111111111111111111111

11111111111111111111111111111111

电信号转换为数字信息:1和0组成的二进制序列

二、一个这样的内存单元是多大空间?

假设一个内存单元是1bit - 2^32bit

在计算器中计算得到:

1 0000 0000 0000 0000 0000 0000 0000 0000 - 2^32

4,294,967,296bit - 转换为十进制

536,870,912Byte - /8

524,288Kb - /1024

512Mb - /1024

0.5Gb - /1024

char - 1Byte - 8bit - 如果给每个bit都有一个地址 - 太浪费了

经过平衡后,以一个字节为内存单元,然后分配地址

三、地址

#include<stdio.h>
int main()
{
  //a在内存中分配空间 - 4个字节
  int a = 10;
  //输出地址 - %p 
  printf("%p\n", &a);
  //存放地址 - pa用来存放地址 - *说明pa是指针变量 - int说明pa执行的对象是int类型的 - pa这个变量的类型就是int*
  int* pa = &a;
  //使用 - 这颗星叫解引用操作符 - *pa就是通过pa的地址,找到a
  *pa = 20;
  printf("%d\n", a);//20
  return 0;
}

四、指针变量有多大?

#include<stdio.h>
int main0202()
{
  printf("%d\n", sizeof(char*));
  printf("%d\n", sizeof(short*));
  printf("%d\n", sizeof(int*));
  printf("%d\n", sizeof(long*));
  printf("%d\n", sizeof(float*));
  //发现不管是什么类型的指针都是4个字节大小?
  //因为指针是用来存放地址的
  //在32(x86)位机器下 - 指针是4Byte
  //在64(x64)位机器下 - 指针是8Byte
  return 0;
}

通过F10调试观察内存

1.F10调试

2.找到内存窗口 可以再把监视窗口也打开

完成以上步骤则会有两个窗口

3.将内存窗口设置为4列

观察相邻的两块内存地址

4.在内存窗口中是以十六进制的形式显示的,且每2个数字是1个字节

十六进制0a转换为十进制为10

在监视窗口发现取出的地址是内存中第1个字节的地址


相关文章
|
存储 人工智能 编译器
c中的指针详解
c中的指针详解
|
存储 Java C语言
指针
一、指针 指针是C语言中的一种特殊数据类型,用于存储变量的内存地址。指针变量可以指向任何数据类型的变量,包括基本数据类型(如整数、浮点数)和复合数据类型(如数组、结构体)。 指针的主要作用是通过引用变量的内存地址来访问和修改变量的值。通过指针,可以直接操作变量所在的内存空间,而不需要通过变量名来访问。这使得指针在一些特定的情况下非常有用,例如动态内存分配、函数参数传递和数据结构的实现。 指针的定义和使用包括以下几个方面: 1. 指针变量的声明:指针变量的声明需要指定指针所指向的数据类型。例如,int *p; 声明了一个指向整数类型的指针变量p。 2. 取地址运算符:取地址运算符&用于获取变量的
43 0
|
7月前
|
存储 算法 C++
C++指针
C++指针
46 0
|
6月前
|
存储 编译器 C++
C++中的指针
C++中的指针
35 1
|
7月前
|
C++ 编译器
|
7月前
|
人工智能
## 对指针的理解
## 对指针的理解
27 0
|
7月前
|
存储 C++
19指针
19指针
33 0
|
7月前
指针(2)
指针(2)
35 0
|
7月前
指针(3)
指针(3)
29 0
|
存储
指针的使用
指针的使用
51 0