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

2024-11-28 18:29:01
推荐回答(4个)
回答1:

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

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

运行程序

# include 
main (){
 int b=1;
 int *a;
 a=&b;
 printf("b         = %4d\n ",b);         // int 变量b的值
 printf("sizof(b)  = %4d\n ",sizeof(b)); // int 变量b的值占用内存空间,单位字节
 printf("&b        = %4d\n ",&b);        // int 变量b的地址值
 printf("sizof(&b) = %4d\n ",sizeof(&b));// int 变量b的地址占用内存空间,单位字节
 printf("\n ");
 printf(" a        = %4d\n ",a);         // int 指针的值(int型变量地址) 
 printf("sizof(a ) = %4d\n ",sizeof(a)); // int 指针的值(int型变量地址)占用内存空间,单位字节
 printf("*a        = %4d\n ",*a);        // int 指针的指向值(int型变量值)
 printf("sizof(*a) = %4d\n ",sizeof(*a));// int 指针的指向值(int型变量值)占用内存空间,单位字节
 printf("&a        = %4d\n ",&a);        // int 指针的地址值
 printf("sizof(&a) = %4d\n ",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型地址空间大小。

回答2:

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
#include
#include
#include

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字节。

回答3:

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

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

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

    printf("--------------------\n");

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

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

    printf("&a = %p\n", &a);                    //int型指针变量的地址编号。
    printf("sizeof(&a) = %ld\n", 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/指针#

回答4:

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