1、c语言中*p表示此指针指向的内存地址中存放的内容。*p一般是一个和指针类型一致的变量或者常量。*p是让程序去那个地址取出数据。
2、例子:int a[5]={1,2,3,4,5};int *p=a;//这是在定义指针变量p的同时就直接给它初始化,即把数组a的首地址赋给它。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//int main()
//{
// int b = 13;
// //&b取地址操作符
// printf("%p\n", &b);
// int* p = &b;
// //int说明p指向的对象是int类型
// //*说明p是指针变量
// printf("%p\n", &p);
// //p为指针变量(存放 【指针/地址】的变量称为指针变量)
// *p = 65;//解引用操作符,通过p存放的地址,找到p所指向的对象,*p就是p指向的对象
// printf("%d\n", b);
// return 0;
//
//}
int main()
{
printf("%zu\n", sizeof(char*));
printf("%zu\n", sizeof(short*));
printf("%zu\n", sizeof(int*));
printf("%zu\n", sizeof(float*));
printf("%zu\n", sizeof(double*));
//指针变量的大小取决于地址的大小
//32位机器上的地址大小:32bit = 4byte,(32个 01 组成的二进制序列)则指针变量的大小是4字节
//64位机器上的地址大小:64bit = 8byte,(64个 01 组成的二进制序列)则指针变量的大小是8字节
}
编译器地址的分配
数组中的项目跨字节通常指的是数组中的单个元素(或项目)的大小超过了单个字节的容量,因此需要多个字节来存储。在计算机科学中,字节是基本的数据存储单位,通常包含8个位(bit)。不同的数据类型在内存中占用的字节数可能不同。
例如,在大多数编程语言和系统中:
- 一个字节(byte)可以存储一个无符号的8位整数(0-255)。
- 一个
short
类型(通常是16位)需要两个字节来存储。 - 一个
int
类型(通常是32位)需要四个字节来存储。 - 一个
long
类型(通常是64位)需要八个字节来存储。 - 一个
float
类型(单精度浮点数)通常也需要四个字节来存储。 - 一个
double
类型(双精度浮点数)则需要八个字节来存储。
当数组中的元素是上述类型中的任何一种时,这些元素就会跨越多个字节。例如,如果你有一个int
类型的数组,并且你的系统使用32位来表示一个int
,那么数组中的每个元素都会跨越四个字节。
这种跨字节的存储对于计算机来说是很自然的,因为它允许我们存储更大范围的值或更复杂的数据类型。但是,这也意味着在访问或操作这些数组元素时,计算机需要能够正确地处理多个字节的组合。
在实际编程中,通常不需要直接关心字节级别的细节,因为高级编程语言提供了抽象的数据类型和操作,使得我们可以更直观地处理数据。然而,在某些特定情况下,如底层系统编程、性能优化或跨平台兼容性处理中,了解和理解数据在内存中的布局和存储方式可能是非常重要的。