指向int型的指针占的内存空间多大?

作者&投稿:曾栏 (若有异议请与网页底部的电邮联系)
请问例如int *a;int是规定指针变量的大小还是指向数据的类型?如果过是指向数据的类型,那么指针多大?~

int是指向数据的类型。在C语言中,指针都是固定大小的,在32位操作系统中,其内容都是32位的地址长度(因为操作系统就是32位的),要看大小,只有看指针所指向的内存单元有多长,这取决于指向数据的类型。
如果满意,欢迎采纳,谢谢
如有疑问,欢迎追问

指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。
比如以前是16位系统,指针即为2个字节,现在一般是32位系统,所以是4个字节。
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。

扩展资料:
1、指针的类型
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:
(1)int*ptr;//指针的类型是int*
(2)char*ptr;//指针的类型是char*
(3)int**ptr;//指针的类型是int**
(4)int(*ptr)[3];//指针的类型是int(*)[3]
(5)int*(*ptr)[4];//指针的类型是int*(*)[4]
2、指针所指向的类型
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:
(1)int*ptr; //指针所指向的类型是int
(2)char*ptr; //指针所指向的的类型是char
(3)int**ptr; //指针所指向的的类型是int*
(4)int(*ptr)[3]; //指针所指向的的类型是int()[3]
(5)int*(*ptr)[4]; //指针所指向的的类型是int*()[4]
3、指针的值或者叫指针所指向的内存区或地址
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32 位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长。
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域。
我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。
4、指针本身所占据的内存区
在32 位平台里,指针本身占据了4 个字节的长度。
参考资料来源:百度百科-指针

int 的指针 其实是long数据,存储一个int变量地址。

也就是询问的是地址空间的大小,int地址 分配是按long分配的也就是

运行程序

# include <stdio.h>
main (){
 int b=1;
 int *a;
 a=&b;
 printf("b         = %4d
 ",b);         // int 变量b的值
 printf("sizof(b)  = %4d
 ",sizeof(b)); // int 变量b的值占用内存空间,单位字节
 printf("&b        = %4d
 ",&b);        // int 变量b的地址值
 printf("sizof(&b) = %4d
 ",sizeof(&b));// int 变量b的地址占用内存空间,单位字节
 printf("
 ");
 printf(" a        = %4d
 ",a);         // int 指针的值(int型变量地址) 
 printf("sizof(a ) = %4d
 ",sizeof(a)); // int 指针的值(int型变量地址)占用内存空间,单位字节
 printf("*a        = %4d
 ",*a);        // int 指针的指向值(int型变量值)
 printf("sizof(*a) = %4d
 ",sizeof(*a));// int 指针的指向值(int型变量值)占用内存空间,单位字节
 printf("&a        = %4d
 ",&a);        // int 指针的地址值
 printf("sizof(&a) = %4d
 ",sizeof(&a));// int 指针的地址占用内存空间,单位字节
 getch();
 }

b          = 1

sizof(b) = 2

&b        = 4044

sizof(&b)=4

 

a           =4044

sizof(a) = 4

*a          =1

sizof(*a) = 2

&a        =4046

sizof(&a) = 4

 

你所问的是:指向int型的指针占的内存空间多大?

也就是: sizof(a) = 4  ,long型存int型地址空间大小。



int类型的大小仅仅是由机器的字长决定的,还是与机器的字长以及编译器都有关?
sizeof(int)=??

指针的类型是由什么决定的呢?
sizeof(Type *)=??

我提出这个问题的缘由是:
林锐的高质量C++/C编程指南中有这样的题目:
二、以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
char *p = str ;
int n = 10;
请计算
sizeof ( p ) = 4 (2分)

sizeof ( n ) = 4 (2分)

#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

int main(void)
{
int i;
char *string;
printf("i %d/n",sizeof(i));
printf("int %d/n",sizeof(int));
printf("char %d/n",sizeof(char));
printf("string %d/n",sizeof(string));
system("pause");
i=10;
string="hahaha";
printf("i=10 %d/n",sizeof(i));
printf("string=hahaha %d/n",sizeof(string));
system("pause");
return 0;
}

i 4
int 4
char 1
string 4
请按任意键继续. . .
i=10 4
string=hahaha 4
请按任意键继续. . .

一般情况下,微机上的 C/C++ 编译器都是以机器字的长度作为整型和指针的长度的,很少有例外,这样你满意了吗?

在一些大型机上,可能会有所不同。

(1)int类型的长度??
……准确的字节数依赖于机器和编译器……
现阶段32bit(即4字节)PC一般在绝大多数编译器下是32bit,当然也有的编译器是16bit(比如turbo C)。最关键一点,只能小,不能大,这是因为即使编译器把它当作大于32bit了,但因为CPU字长只有32bit,所以也只能处理32bit的数。
同时需要注意的就是 在c标准中只是对不同的数据类型的数字范围设置了下界,但是没有上界。

(2)指针的类型是由什么决定的呢?
sizeof(Type *)=??
==================
指针的大小是由内存寻址空间决定的,即地址总线决定。

一般32位机寻址空间4G,所以指针占4字节;

一般8位的单片机寻址空间是64k,所以指针占2字节。

/*
不废话,请看代码演示如下:
注意使用的操作系统的位数,不同位数的操作系统,结果不一样!
我是用的是64位的操作系统!
linux下示例代码如下:
*/
#include <stdio.h>

int main()
{
    int b = 1;
    int *a; 
    a = &b; 

    printf("b = %d
", b);                      //int型变量b的值。
    printf("sizeof(b) = %ld
", sizeof(b));     //int型变量b的值所占用内存空间的大小,单位是字节。
    
    printf("&b = %p
", &b);                    //int型变量b的地址编号。
    printf("sizeof(&b) = %ld
", sizeof(&b));   //int型变量b的地址编号所占用内存空间的大小,单位是字节。

    printf("--------------------
");

    printf("a = %p
", a);                      //int型指针变量a(int *),指向int型变量b的地址编号。
    printf("sizeof(a) = %ld
", sizeof(a));     //int型指针变量a(int *),指向int型变量b的地址编号,该地址编号所占用内存空间的大小,单位是字节。

    printf("*a = %d
", *a);                    //int型指针变量的指向值。
    printf("sizeof(a) = %ld
", sizeof(*a));    //int型指针变量的指向值所占用内存空间的大小,单位是字节。

    printf("&a = %p
", &a);                    //int型指针变量的地址编号。
    printf("sizeof(&a) = %ld
", sizeof(&a));   //int型指针变量的地址编号所占用内存空间的大小,单位是字节。
                                                //int型指针变量是一级指针,一级指针的地址编号则是二级指针。
    return 0;
}
                                                                                                                                                                 
"p36.c" 27L, 1049C written
root@iZ2zeeailqvwws5dcuivdbZ:~/1/01/指针# gcc -o a p36.c 
root@iZ2zeeailqvwws5dcuivdbZ:~/1/01/指针# a
b = 1
sizeof(b) = 4
&b = 0x7ffc2b5ba1fc
sizeof(&b) = 8
--------------------
a = 0x7ffc2b5ba1fc
sizeof(a) = 8
*a = 1
sizeof(a) = 4
&a = 0x7ffc2b5ba200
sizeof(&a) = 8
root@iZ2zeeailqvwws5dcuivdbZ:~/1/01/指针#


你指数据的长度?还是指针?


指向int型的指针占的内存空间多大?
\/\/ int 指针的值(int型变量地址)占用内存空间,单位字节 printf("*a = %4d\\n ",*a); \/\/ int 指针的指向值(int型变量值) printf("sizof(*a) = %4d\\n ",sizeof(*a));\/\/ int 指针的指向值(int型变量值)占用内存空间,单位字节 printf("&a = %4d\\n ",&a); \/...

C语言中(int)a%(int)b什么意思
运算符在C语言中运算时要求两端的变量时整形或者是flout类型,(int)a是将a强制转换为整形,同理,(int)b是将b强制转换为整形,然后进行求余运算,这样计算的结果就是整形

C语言中一个指针占用多少字节
一个指针变量在内存中占两个字节(small模式编译),一个指针变量在内存中占四个字节(32位机器上),一般都是32位机器的,所以四个字节咯。指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要...

内存单元的基本单位是字节,int i占四个字节,指针p指向int,是指向i的...
因为在32位的的电脑中地址线是32位,所以内存字节地址是由32个0或者1组成的。一个字节是8位,要存放一个地址需要32位也就是4个字节。如果是64位的机器内存地址由64个0或1组成,也就是说要存放64位机器的内存地址需要8个字节。

python一个对象占用多少资源(python一个对象占用多少资源空间)
暂时已知:这个值包括该对象的数值、签名(包括数据类型、参数、调用方式等)等一系列数据所占总内存。可变对象所占内存可能极小,因为对象是指针,指向很大的数据。Python对象 众所周知,Python是一门面向对象的语言,在Python无论是数值、字符串、函数亦或是类型、类,都是对象。 对象是在堆上分配的结构,我们定义的所有...

请教下,用char指针指向int型地址,为什么会出现负数?
这种问题不用想了,不同类型的指针相互指向根本就是不和规范的严重错误行为,地址可以以任何形式表现,毕竟是错误的,什么都有可能

Python查看数据占用多少字节(2023年最新解答)
这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。相关推荐:《Python教程》下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:需要说明一下的是指针类型存储的是所指向变量的地址,所以32位机器只需要32...

c语言中%p是什么意思?
格式控制符“%p”中的p是pointer(指针)的缩写。指针的值是语言实现(编译程序)相关的,但几乎所有实现中,指针的值都是一个表示地址空间中某个存储器单元的整数。printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。p是打印地址的, %x是以十六进制形式打印, 完全不同!另外在64位...

char、 int、 float和double类型的数据在计算机存储空间中占用几位?
选A,解析:在16位PC机中,5种基本数据类型的存储空间长度的排列为:char型:1个字节 int型:2个字节 long int:4个字节或者4个字节-1位 float型:4个字节 double型:8个字节

C语言中各种数据类型有什么区别?
1、数据计算类型不同。基本数据类型分为三类:整数型(定点型)、实数型(浮点型)和字符型。除了基本数据类型,还有构造类型(数组、结构体、共用体、枚举类型)、指针类型、空类型void。2、各种数据类型的关键词不同。short、long、int、float、double、char六个关键词表示C语言里六种基本数据类型。3、...

青神县15322742889: c 中一个变量为int型,它所占的内存空间? -
银萍西吡: 早期的平台使用2字节int,所以每个int变量占2个8位二进制空间;时下的平台已是4字节int系统了,每个int型变量占4个8位二进制空间.它们都是连续的.

青神县15322742889: 字符指针、浮点数指针、和函数指针的变量那个占用内存最大? -
银萍西吡: 都一样大,因为指针就是个整型数,32位,4个字节.指针实际上就是内存地址,所以指针取值范围决定了进程的虚拟地址空间大小

青神县15322742889: 指针变量, 系统会给它分配内存单元吗? -
银萍西吡: 这个是会的,指针也是变量,所有的变量都会有一个地址来保存他的值,指针的大小根据不同的系统不一样,但是都是占一个int型,如果是32位,就是4个字节,16位就是2个自己,正是因为指针有了地址来保存,所以就有指向指针的指针,同样,每个函数其实也是有一个地址来保存,用来说明这个函数在内存的地址,当要调用这个函数时,只要知道这个地址,就可以找到这个函数,也就有了指向函数的指针 使用指针的时候一定要注意,指针的使用时有风险的,要特别注意“野指针”的产生,尽量不要让指针指向不确定的地址,这样有可能导致程序错误,更严重的导致系统崩溃.祝你进步!

青神县15322742889: “指针的 类型”和“指针所指向的类型”有什么区别 -
银萍西吡: 你说的对,在32机器里,指针的容量就是4字节的.指针的类型实际上就是指针所指向的变量的类型. 为什么在声明指针的时候要声明出它所指向的变量的类型呢? 因为,例如: int * p; 在以后的程序中有可能要做 int a=*p的操作,所以* ,即取值操作就要知道p所指向的空间里存放的变量的类型,根据不同的类型,*操作会读取不同长度的连续空间,例如:int 4字节; double 8字节.

青神县15322742889: 如何理解char型指针与int型指针的不同表现 -
银萍西吡: char型指针和int型指针,指针变量本身都是占4个字节的内存空间,可以通过sizeof(char*)或者sizeof(int*)来得到占用的字节空间数,存放的都是一个32位的地址值.不同之处在于,char*指针类型和int*指针类型在做算术运算的时候,地址值的变...

青神县15322742889: 一个指针变量占几个字节问题 -
银萍西吡: 指针不同于一般变量,存的是变量的地址,在同一架构下地址长度都是相同的(cpu的最大寻址内存空间),所以不同类型的指针长度都一样 你输出的4 4 4,说明指针长度为4字节 可以记录的地址范围是0x00000000~0xFFFFFFFF,这个范围才是指针变量的值 比如说一个char 1字节,可以存在0x0,也可以位于0xFFFFFFFF 而和char占用1字节还是100字节无关,指针的范围只和机器字和系统有关 比如你的32位系统,指针长度为4,在64位操作系统下那么就都是8了

青神县15322742889: C语言中指针变量所占内存与指针类型?求解说 -
银萍西吡: 比如说32位的系统中,指针变量所占的内存是一个无符号 int 型的长度也是四个字节 而指针类型是指它指向的地址是什么类型的

青神县15322742889: 请问指针占用多少字节 -
银萍西吡: 指针就是一个地址值,在32位系统下,占用4个字节,用sizeof求枚举类型的长度,等于一个int型的长度,而与有几个枚举值无关.所以a也是占4个字节,

青神县15322742889: 字符指针最多能指向多大的内存空间 -
银萍西吡: 不管是字符指针还是int指针,还是什么其它的任何指针,他能指向的最大内存空间由使用的系统决定,如32位系统,因为指针存储的是地址数据,而在32位系统中指针占4个字节,因此最大指向2^32 = 0x1 0000 0000=42亿多的字节空间.

青神县15322742889: 关于 C语言 指针的一些疑问.. -
银萍西吡: 1. a表示一个地址,就是你申请出来的空间的首地址.2.可以用指针来操作数组,指针可以用数组的下标的方式来访问数据,但是这两个东西本质上还是不同的,他们只是操作方式相似或者相同.3.a是数组第一个元素的首地址,&a是数组的地址,他们的值一样但是代表的意义不一样.他们的类型不同,比如a+1 只会移动一个元素的长度,而&a + 1会移动一个数组的长度.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网