学习指针变量占用内存字节数相关心得

在学习设置数据收发缓冲区时,做以下实验

void main ()
{    
    LPBYTE m_data=new BYTE[16];

    memcpy(m_data,"example",sizeof(m_data));
    string str="   ";
    str[0]=m_data[3];
    cout<<str<<endl;
}

函数memcpy(m_data,"example",sizeof(m_data));将“example”在内存中的二进制字节数据直接复制到m_data所指向的缓冲区中,复制的大小为第三个参数;

sizeof(数据类型)
此运算符功能:返回值就是该数据类型所占的字节数。

sizeof(变量名)
此运算符功能:返回值就是该变量所占的字节数。

不了解为什么m_data[k]当k>3时,输出总是?(m_data是一个指针变量)

可以直接用整数代替sizeof(m_data)得到理想结果。

经过实验

 1 # include <stdio.h>
 2 int main(void)
 3 {
 4 char ch = 'A';
 5 int i = 99;
 6 double x = 66.6;
 7 char * p = &ch;
 8 int * q = &i;
 9 double * r = &x;
10 printf("%d %d %d\n", sizeof(p), sizeof(q), sizeof(r)); //分别输出不同类型的指针变量名占多少字节。
11 return 0;
12 }

运行结果为 4 4 4

所以发现任何类型的指针变量都是占用4个字节。并且知道任何char(signed、unsigned或普通的)类型的sizeof都是1!不管char潜在的存储空间是否实际上是一个字节。

也就理解sizeof(指针变量)并不管指针所指向的区域大小,而是一个定值4,即sizeof(指针变量)占用内存大小为4,不关心指向的区域大小。

posted @ 2014-07-19 22:58  连裆裤  阅读(525)  评论(0)    收藏  举报