1.sizeof(int)*p 2.int *p=NULL;sizeof(p)的值是多少?sizeof(*P)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.sizeof(int)*p 2.int *p=NULL;sizeof(p)的值是多少?sizeof(*P)相关的知识,希望对你有一定的参考价值。

首先,不同的系统位数下,指针所占的字节数是不同的。
16位系统已经很少使用了,暂不在本题讨论范围内。
32位系统下→ 指针所占字节数是4,即4*8 = 32位,在64位操作系统下→指针则占8个字节,即8*8=64位。
然后我们来看你的第一个问题————1. sizeof(int)*p ,这里sizeof(int)就是4,因为int在32和64位操作系统里都是占4位,这句话其实就是4*p; 如果p是一个整数2,那么结果就是8。第一个问题结束哈。
我们继续看第二个问题————2. int*p =NULL;意思是p这个整数型指针变量指向NULL,不管它指向什么它都是指针类型,所占字节数是固定的; 所以在32位系统里sizeof(p) = 4,在64位系统里sizeof(p) = 8;再看sizeof(*p),*p就是NULL的内容,也即0x00000000的内容,且该内容是Int类型的,输出的就是sizeof(int),size(int)无论在32位还是64位系统都是4位的,所以sizeof(*p) 的值都是一样的即sizeof(*p) = 4。

纯手打,希望能帮到你~
参考技术A sizeof(short int) 是 2
sizeof(long int) 是 4
有的编译器规定 int 是 long int, 有的编译器规定 int 是 short int,
sizeof(int) 则可能 是 2 也可能是 4。
int *p=NULL; 指针地址用 DWORD, sizeof(p) 是 4。
sizeof(*p) 是值, 等于 sizeof(int) ,可能 是 2 也可能是 4。
64 位系统,也许有新定义。你要试运行来确定。
参考技术B 再intel的64位上sizeof(p)是8 sizeof(*p)是4 参考技术C 4

sizeof(数组名)和sizeof(指针)

在做这道题时:

32位环境下,int *p=new int[10];请问sizeof(p)的值为()
A、4              B、10              C、40               D、8

我以为正确答案为C,int类型为32位,占四个字节,10个自然就是40了,结果正确答案为A,只是指针p占的空间。

因此写段代码测试一下:

#include<iostream>
using namespace std;
void fun(int *P)

	cout<<"在函数中"<<sizeof(P)<<endl;

int main()

	int A[10];
	int* B=new int[10];
	cout<<"数组名"<<sizeof(A)<<endl;
	cout<<"指针"<<sizeof(B)<<endl;
	fun(A);

结果输出:

数组名40
指针4
在函数中4


由此可见,数组名并不是完全等同于指针。虽然它们都可以通过指针方式访问数组。在这个博客看到他们的区别:http://blog.csdn.net/ljob2006/article/details/4872167

但是数组在作为函数参数传递过程中,会退化成指针。这也是为什么指针作为参数传递时,经常要一个长度。

以上是关于1.sizeof(int)*p 2.int *p=NULL;sizeof(p)的值是多少?sizeof(*P)的主要内容,如果未能解决你的问题,请参考以下文章

int a[3] = 1,2,3; int*p, *q; p = a; q = &a[2]; int i = q-p;为何i的结果为1而不是8,C语言的规定?

C 指针使用误区

4C_复杂表达式和指针高级应用

const引用和constexpr

p96_3.2

const修饰规则