c语言 怎么将字符串中的地址取出其内存输出

c语言 怎么将字符串中的地址取出其内存输出,第1张

字符串是一连串地址连续的内存空间,每个地址对应字符串元素的地址。

我们一般说的字符串的地址,就是指字符串首元素的地址。

比如: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语言 如何输出指针所指向空间的大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9781726.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存