在学习设置数据收发缓冲区时,做以下实验
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,不关心指向的区域大小。
学习指针变量占用内存字节数相关心得,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/jiangmingyuan/p/3855599.html