初步认识c语言:简单描述指针(重点)

目录

目前不讲指针的复杂用法

一.指针的作用

二.地址的概念和数据存放的原理

a地址的编号

 为什么地址的样子类似于0x00EFF858这样

指针的表达

三.指针的变量大小


目前不讲指针的复杂用法

一.指针的作用

可返回多个或不同类型的值,弥补数组与函数的缺陷。

在程序设计过程中,无论是存入数据还是取出数据都需要与内存单元打交道,计算机通过地址编码来表示内存单元。指针类型就是存放地址编码,处理计算机的地址数据的。

指针除了能够提高程序的效率,更重要的作用是能使一个函数访问另一个函数的局部变量,因此指针是两个函数进行数据交换必不可少的工具。

二.地址的概念和数据存放的原理

首先

需要我们知道计算机中内存会划分为一个个内存单元地址

 

在我们写程序的时候

int main()
{    
int a = 10;

    return 0;
}

其中变量a会向内存申请4个byte大小的空间去存放a(也就是4个内存单元格)


a地址的编号

#include<stdio.h>
int main()
{    
int a = 10;
printf("%p\n",&a);//将其a的地址打印出来0x00eff858
    return 0;
}

 为什么地址的样子类似于0x00EFF858这样

例如int a=10;a向内存申请4个byte

0000 0000 0000 0000 0000 0000 0000 1010

转化为16进制就是0x0000000a


指针的表达

 #include<stdio.h>
int main()
{    
char ah = 10;
char*ah = &ah;//char 说明ah指向的对象是char类型  *说明p是指针变量
    return 0;
}

 

*p解引用操作符

#include<stdio.h>

int main()
{    
char ah = 10;

char*p = &ah;//char 说明ah指向的对象是char类型  *说明p是指针变量

*p=20//解引用操作符,意思是通过p存放的地址,找到p所指代的对象。所以*p就是p指代的对象。
printf("%d\n",a);
//最后打印出的数字为20
    return 0;
}

三.指针的变量大小

可用操作符sizeof来计算(单位为byte)

 #include<stdio.h>

int main()
{    
     printf("%d\n",sizeof(char*));   
     printf("%d\n",sizeof(int*));//
     printf("%d\n",sizeof(float*));
     printf("%d\n",sizeof(double*));
     printf("%d\n",sizeof(short*));

    return 0;
}

在C/C++中,指针变量的大小是固定的,它的大小与操作系统和编译器有关。具体来说,指针变量的大小通常为4字节或8字节,取决于操作系统和编译器的位数。

在32位的操作系统上,指针变量的大小通常为4字节;在64位的操作系统上,指针变量的大小通常为8字节。

这是因为32位操作系统的地址总线宽度为32位,最多可以寻址2 ^ 32(4 个 8bit 即 4B)个内存单元,因此一个指针变量需要4字节来存储地址。而64位操作系统的地址总线宽度为64位,最多可以寻址2 ^ 64(8 个 8bit 即 8B)个内存单元,因此一个指针变量需要8字节来存储地址。

需要注意的是,指针变量的大小只与地址空间有关,而与指向的对象类型无关。无论指针变量指向何种类型的对象,它的大小都是固定的。

参考 32,64最大支持的内存寻址空间
 

猜你喜欢

转载自blog.csdn.net/fcccfffg/article/details/132039175