
字符串是一连串地址连续的内存空间,每个地址对应字符串元素的地址。
我们一般说的字符串的地址,就是指字符串首元素的地址。
比如:char
str[10];这样的数组。它的地址就是其str[0]的地址。
所以可以表示为str,或者&str[0]。
如果说取其他元素的地址,&str[对应下标]就可以了。
因为地址连续,定义指针接收,还可以通过指针加减获取对应元素地址。
比如char
p=&str[2];(我们让指针指向第3个元素地址),那么p++;p就是指向了第4个元素地址。同理p--;就指向第2个元素地址。
注意,数组名str,可以表示数组首地址,但其本身是常量指针,不能赋值。
另外打印地址,可以用格式%p
实际上在C++的string中,这个length依然是strlen()求出来的值,
目前来看,要解决你说的问题,貌似只能用结构体来存了,
struct mystr
{
char arrray;
int length;
};
mystr str;
strlength=20;
strarrray==(char )malloc(sizeof(char)strlength);
期待高手给出更好的方法。
C语言无法输出指针所指向的空间的大小!
一般,我们获取一个变量所占内存空间的方法为:sizeof(变量名或类型名),如:
int a;int aa[10];
int p=aa;
printf("sizeof(int)=%d\n", sizeof(int) ); //现在的机器一般为32位或64位机,int类型占四个字节,所以输出4
printf("sizeof( a )=%d\n", sizeof(a) ); //输出4
printf("sizeof( aa )=%d\n", sizeof(aa) ); //输出410=40
printf("sizeof(p)=%d\n", sizeof(p) );//输出4 ?见下面说明
printf("sizeof(int )=%d\n", sizeof(int ) );//输出4 ?见下面说明
指针变量定义:用来存储内存地址的变量。指针变量中存储的是内存地址数据(一个整型数),而不是真正的数据,真正的数据是在地址中存放的。所以,指针变量实际上就是个整型变量,用sizeof命令去获取任意类型的指针变量都会得到4。
指针变量存储的是一个存储空间的首地址,究竟这个空间有多大,可以存储多少个数据,这是分配空间时所决定的。单独看一个地址值,是看不出其空间大小的。如:
int a;
int aa[10];
int p ; //定义一个指针变量
p=aa ; //指向数组aa,aa的数据空间是40字节,10个整数
p=&a; //指向一个整型变量,它的存储空间是4字节,一个整数
这里涉及到一个结构体的一个对齐的问题。
当不使用#pagram pop(n)时其中n就是对齐的字节数,默认是按结构体中最大字节成员对齐。
你的结构体里有个double类型的变量,是8字节,而下面有个指针变量,4个字节,由于8最大,所以按8字节对齐。所以你的结构体,你可以理解为每8字节一排,有多排来存储这些所有的成员,即:
第一排:double (刚好8字节)
第二排: (指针类型,只占了左边4个字节,右边还有4个字节空着)
所以你的这个结构体总体来说是占16个字节,虽然有效的为12个字体,这也说明了一点:如果你结构体的各成员在设计时排列不恰当,会造成内存浪费。
具体再举个例子:
struct
{
double a;
int b;
char c;
}
第一排:double (刚好8字节)
第二排:int char (int类型只占了左边4个字节,而右边还有4个字节还足以放char类型1个字节)
所以int 和char共享了一排的8个字节,所以总共还是16字节。
如果把顺序换一下:
struct
{
char c;
double a;
int b;
}
第一排:char (只实际用了1个字节,而右面空着7个字体容不下第2个的double类型8字节)
第二排:double (由于double的8字节在第一排放不下,只能放到第二排来)
第三排:int (int占4字节,右边又空4字节)
所以这个结构体就占24字节了。
这与C语言自身无关,属于运行时 *** 作系统的问题,应该借助于 *** 作系统的进程内存分配去向 *** 作系统查询。如果用C语言的内存管理函数去计算,会相当麻烦,而且计算方法随着 *** 作系统平台的不同而变化。
如果是在Windows环境运行,可以使用Windows的API函数GlobalMemoryStatusEx,返回的结构中dwTotalVirtual的值与最大值之间的差,就是当前进程所占用的内存空间大小。
我觉得你的要求有一个函数完全可以满足你~
直接文件映射到内存就可以了~
>
以上就是关于c语言 怎么将字符串中的地址取出其内存输出全部的内容,包括:c语言 怎么将字符串中的地址取出其内存输出、C:如何得到指针分配的内存空间块的大小、C语言 如何输出指针所指向空间的大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)