指针的大小:
#include<iostream>
#include<string>
using namespace std;
void main()
{
double a[]={1,2,3};
double *x =a;
cout<<sizeof(a)<<endl;
cout<<sizeof(x)<<endl;
}
运行结果是:
24
4
请问这个“4”是什么的大小?指针?
是指针变量占用内存的大小(字节数).
在32位机上,所有指针类型变量占用内存字节数都为4
因为32位机就是 4字节 * 8个二进制位/字节 计算出来的.
如果在64位机上,指针占用内存大小就是:
8个字节.
(2)
今天看视频讲到指针变量所占字节的问题,开始觉得很简单,听后觉得自己学的还真是肤浅啊,以前都没有想过这种问题。
1.无论指针变量指向任何类型的变量它所占字节都是4个字节。因为指针只保存变量的首字节的地址。
在32位操作系统中,CPU地址总线为32,一个地址总线有两种状态:1和0,所以最高就是2^32次方,一个内存地址的标号就要用4个字节(32位)来存储。最小的内存地址就是32个0,最大的地址就是32个1。
所以无论指针指向的是什么类型的变量,只要能够保存下该变量的首地址就可以根据变量类型来找到指定的变量了
(3)
#include <iostream>
#include"stdio.h"
using namespace std;
int fun(int a[3])
{
return sizeof(a);
}
// 等价于 int fun(int *a)
int main()
{
int b[3];
cout<<sizeof(b);
cout<<endl<<fun(b)<<endl;
cout << "Hello world!" << endl;
return 0;
}
结果为12,4
注意:数组作为参数时,与指针作为参数其实是一样的。
指针与数组名的关系:
都是地址,但是指针是变量,可以移动,数组名是常量。
#include<iostream>
#include<string>
using namespace std;
void main()
{
double a[]={1,2,3};
double *x =a;
cout<<sizeof(a)<<endl;
cout<<sizeof(x)<<endl;
}
运行结果是:
24
4
请问这个“4”是什么的大小?指针?
是指针变量占用内存的大小(字节数).
在32位机上,所有指针类型变量占用内存字节数都为4
因为32位机就是 4字节 * 8个二进制位/字节 计算出来的.
如果在64位机上,指针占用内存大小就是:
8个字节.
(2)
今天看视频讲到指针变量所占字节的问题,开始觉得很简单,听后觉得自己学的还真是肤浅啊,以前都没有想过这种问题。
1.无论指针变量指向任何类型的变量它所占字节都是4个字节。因为指针只保存变量的首字节的地址。
在32位操作系统中,CPU地址总线为32,一个地址总线有两种状态:1和0,所以最高就是2^32次方,一个内存地址的标号就要用4个字节(32位)来存储。最小的内存地址就是32个0,最大的地址就是32个1。
所以无论指针指向的是什么类型的变量,只要能够保存下该变量的首地址就可以根据变量类型来找到指定的变量了
(3)
#include <iostream>
#include"stdio.h"
using namespace std;
int fun(int a[3])
{
return sizeof(a);
}
// 等价于 int fun(int *a)
int main()
{
int b[3];
cout<<sizeof(b);
cout<<endl<<fun(b)<<endl;
cout << "Hello world!" << endl;
return 0;
}
结果为12,4
注意:数组作为参数时,与指针作为参数其实是一样的。
指针与数组名的关系:
都是地址,但是指针是变量,可以移动,数组名是常量。