C语言中,指针占用的空间是多大?和指针类型有关系吗

2020-11-24 14:31:00 字数 5859 阅读 2951

1楼:

指针和其指向的数据类型有关系,你可以用sizeof()来做测试:

printf("the size of char is %d\n",sizeof(int*));

printf("the size of char is %d\n",sizeof(char*));

另外,指向结构体的指针就要看具体情况了,c语言还有所谓的“对齐机制”,就是结构体里的单元,所分配的空间实际上要参照结构体里“体积”最大的那个单元。就是说,比如一个char和一个int,char要向int看齐,一个char和一个double,char要向double看齐。关键就在于凑整数,凑成最大变量大小的倍数。

当然,如果结构体里只有char型的变量或是数组,就不存在一定要凑数的问题了。

2楼:匿名用户

2字节,声明为far时为4字节

c语言中一个指针占用多少字节

3楼:匿名用户

指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关,譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节。

4楼:蒸蒸zh日上

借lz的问题,请教大家一个问题吧; 指针占用的字节数和指针的类型有关系吗?谢谢哦~

c语言中,定义一个指针的时候为这个指针开辟存储空间吗?

5楼:海天盛筵

int*p:第一级指针,表示p点所在地址是一个100int类型的值,p被声明为一个指向整数的指针,并且为这个指针分配了存储空间。但在这种情况下,它是一个随机数,我们称之为指向一个不确定的内存地址。

当用户说“direct*p=5”时,在一个不可预知的内存地址上写入一个整数5。这是不允许的,并可能导致程序崩溃。

p = & a;然后,将现有变量a的地址写入指针p,我们说指向a的指针可以通过变量p对变量a进行正常操作。

扩展资料:

指针:指针的表示法是地址,核心是指向关系的指针,操作符“*”的作用是根据关系访问所指向的对象。如果版本与b有指向关系,则a为b的地址,“*a”表示通过该指向关系间接访问b。

如果b的值是一个指针,它指向c,bc地址,间接访问,cb“*”如果c是整数,真实的,或结构,如类型变量或数组元素对于这些类型的数据,bc(即地址)是通用的指针,即主要指的是右边的针,持有一级指针变量指针变量。

6楼:四舍**入

int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值,声明p为指向整型数的指针,这时为这个指针分配了存储空间。但这时其中是随机数,我们称它为指向一个不确定的内存地址。

用户说的“直接*p=5”,那么就会在一个无法预知的内存地址写入一个整型数5。这是不允许的,可能导致程序崩溃。

p=&a; 则是把已有的变量a的地址写入指针p,我们称使指针指向a. 可以通过p对变量a正常操作。

7楼:leap灬『跃

内存都是用地址编好了每一”格“的,一个地址对应一“格”,定义一个指针时,系统为指针随机赋一个内存大小范围内的地址,所以该指针肯定指向内存的某一“格”。如果没对指针进行赋值便使用(如p->next之类的),一般情况下在windows中运行时会提示非法访问内存,然后程序崩溃(调试时经常出现的情况),如果其他操作系统没有这样保护的话,可以使得指针任意访问内存,这是非常危险的,所以尽量别出现野指针。

1、因为定义的指针已指向一个地址,所以可以*p=5;

2、定义指针时并不是开辟内存空间,指定指针类型主要是为了在 *p 访问指针指向内容时可以确定怎样读取这块连续的内存(例如int与long所占的字节是不同的)

8楼:春风不醉人

呵呵,这个问题不会太纠结:

在定义 int *p 时,系统随机给p一个值,其对应内存中一处空间,并非为空(不信可以自己试试,当你不对p赋值时打印*p,这是有输出的);

让p = &a; 这是为p 赋初值,让p指向程序员指定的地址(之前是随机的,非为程序员指定的),它原来的内存空间仍然存在,且这不涉及释放不释放的问题(只在动态申请时存在释放的问题);

不知我说的是否清楚,o(∩_∩)o~

9楼:

int *p; 声明p为指向整型数的指针,这时为这个指针分配了存储空间。但这时其中是随机数,我们称它为指向一个不确定的内存地址。

如果象你说的“直接*p=5”,那么就会在一个无法预知的内存地址写入一个整型数5。这是不允许的,可能导致程序崩溃。

p=&a; 则是把已有的变量a的地址写入指针p,我们称使指针指向a. 可以通过p对变量a正常操作。

10楼:***x樱

**都不指,内存里是随机值

不可以直接*p=5

11楼:无言de结局

c的话定义之后是随机值

判断题:c语言中字符型的指针变量和实型的指针变量所占用的空间是相同的。

12楼:匿名用户

正确,首先:指针变量

的定义是用于存储变量地址的变量.那么这个变量的大小就与变量地址的大小一样,而变量地址多大呢?这个与用多少位的系统有关,比如,你用32位系统,那么地址就是32位,你用64位系统,那么地址就是64位.

在一个系统内,所有的变量的地址的大小都是一样的,就这个题,整型,字符型,实型,地址的大小一致.所以指针变量的大小也就相同了.生活中比较类似的是手机号,不管是哪个地区的手机号,大小都是11位的,北京,河北,山东......

都一样大小.

13楼:匿名用户

所有指针变量占用4个字节,用于存储起始地址与空间量,2字节存储起始地址,2字节存储指向数据所使用空间量。所以字符型指针和实型指针的空间使用量是一样的,都是4字节。

14楼:匿名用户

正确 指针在c里代表的是实际的地址的开始字节 一个计算机里的地址描述位数是相同的 所以这是正确的

在c语言中一个指针占用多少字节。

15楼:blackpink_罗捷

一个指针变量在内存中占两个字节(**all模式编译),一个指针变量在内存中占四个字节(32位机器上),一般都是32位机器的,所以四个字节咯。

指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。

扩展资料

1、指针的类型

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:

(1)int*ptr;//指针的类型是int*

(2)char*ptr;//指针的类型是char*

(3)int**ptr;//指针的类型是int**

(4)int(*ptr);//指针的类型是int(*)

(5)int*(*ptr);//指针的类型是int*(*)

2、指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:

(1)int*ptr; //指针所指向的类型是int

(2)char*ptr; //指针所指向的的类型是char

(3)int**ptr; //指针所指向的的类型是int*

(4)int(*ptr); //指针所指向的的类型是int()

(5)int*(*ptr); //指针所指向的的类型是int*()

16楼:哇哎西西

指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。

比如以前是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 个字节的长度。

17楼:舟

指针即为地址,它是一个

无符号整数(unsigned int),

它是一个以当前系统寻址范围为取值范围的整数。

指针几个字节跟语言无关,而是跟系统的寻址能力有关。

譬如以前是16为地址,指针即为2个字节,

现在一般是32位系统,所以是4个字节,

以后64位,则就为8个字节。

扩展资料:1、在64位机器中:

char类型占1个字节,short类型占2个字节int类型占4个字节,long类型占4个字节unsigned int类型占4个字节,float类型占4个字节double类型占8个字节。long double类型占12个字节2、内存分配表

计算机中的内存都是编址的,就像你家的地址一样。在程序编译或者运行的时候,系统(可以不关心具体是什么,可能是编译器,也可能是操作系统)开辟了一张表。每遇到一次声明语句(包括函数的传入参数的声明)都会开辟一个内存空间,并在表中增加一行纪录。

记载着一些对应关系。

3、c语言

c语言是一门通用计算机编程语言,广泛应用于底层开发。c语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

c语言中,占用空间最小的类型是什么

1楼 匿名用户 字符类型 只占1个字节 用 char表示 还有一种类型 void 空类型,没意义 2楼 匿名用户 定义位域用1位二进位来保存1和0 include struct bs data int main void 3楼 匿名用户 short int已经很小了,只占一个字节 4楼 匿名用户 用...

c语言中数组名和指针变量的区别,C语言中数组名和指针的区别

1楼 销 数组名除了sizeof会返回数组大小,其他的实况下是相当于一个指针常量无区别的 指针常量也就是说,不能改变数组名的值,比如int a 10 a a a a 10等都是非法的 c语言中数组名和指针的区别 2楼 匿名用户 数组在当作参数传递时,可以当作指针 当然,参数传递相当于赋值操作,所以用...