字符指针变量string的地址,是怎么回事

字符指针变量string的地址,是怎么回事,第1张

C语言中字符串本身就是一个字符数组,字符指针string的值是其指向的字符数组的首地址,访问方式为(string + 7)或string[7];但此段代码中的会当成一个长度为14的字符指针,因此string+7就会是其指向的第八个长度为14的字符指针的内容,很明显会是一个不知是什么的乱码。

猜测楼主是要取字符串中的第7和8个字符,建议用string[7]和string[8]

1、获得函数的地址

函数名实际上就是指针,所以可以通过强制类型转换来获取函数的地址。

int i = 0;

i = (int)main;

printf(“%d\n”,i);

这样我们就获取了main函数的地址了,其他的自定义的函数也是同样的道理啊。

2、获取变量地址

int variab = 0;

int addrvar = 0;

addrvar = (int)&variab;

在变量addrvar中保存了变量variab的地址。

3、获得数组的地址

数组本身就是指针,它本身就是内存地址,和获得函数地址的方法一样啊。比如

int array[10];

int addrarr;

addrarr = (int)array;

java中不建议直接获取字符串内存地址,因为java不像c语言,获取内存地址是C语言的强项,java的弱项。但是java内存地址还是有一个应用场景,就是判断两个字符串内存地址是否相等来判断是否是同一个对象,用双等号“==”来比较的。参考代码如下:

public

class

Test01

{

/

@param

args

/

public

static

void

main(String[]

args)

{

//

TODO

Auto-generated

method

stub

String

str1="abc";

String

str2=new

String("abc");

Systemoutprintln(str1

==

str2);//输出false

}

}

String str1 = "abc";String str2 = "abc";Systemoutprintln(str1==str2); //true

这样就是true了

String str="abc";Systemoutprintln(strgetBytes());

这个就是地址[B@7150bd4d B可能是类名 因为我的类是B @后面的大概是地址了 没研究过 但是过去地址确实是这个

应该是不可能的。想想就知道了

为什么要用指针(或者说地址)呢,是因为我们有可能要改变该单元里面的值

既然你叫“W”是常量,那你还想改变它里面的值吗?如果是,那它就叫变量了

至于你说“

‘W’也应该是个指针”,应该也不然。

考虑下

char

string[]

=

"stirng";

if

(string

==

"not

string")

//其实字符串可以这样比较吗?我也忘了

以上是用stirng数组的首地址与“not

stirng”,

我忘了C是不是可以这样来比较串。你说

通过编译,那我就假设是可以的。再想回(&a[5]dir=="W")情况,这是用(a[5]dir)的

地址与“W”比较,C会将(a[5]dir)所在单元后的内容与“W”比较。原理和(string

==

"not

string")一样

呵呵,还有一点,我猜你可能想到了,就是比较char常量不是"W",

而是'W'

基本信息

String就是C++、java等编程语言中的字符串,用双引号引起来的几个字符如"Abc","一天"

特别注意

String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象这样的话把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似

String s1,s2;

s1 = "abc";

s2 = s1;

s2 = "def";

//这样 *** 作之后s1还是"abc",s2则是"def",s1不受s2的影响

string a = "hello,word!";

string b = "hello,word!";

string c = "hello!";

string a = "hello,word!";

string b = "hello,word!";

string c = "hello!";

a 和 b 是不是指向同一个地址呢,这个问题在各论坛都是谈论很激烈,其实很简单,跟下这些字符串的内存地址就好了

string a = "hello,word!";

00000042 mov eax,dword ptr ds:[02A62208h]

00000048 mov dword ptr [ebp-44h],eax

string b = "hello,word!";

0000004b mov eax,dword ptr ds:[02A62208h]

00000051 mov dword ptr [ebp-48h],eax

string c = "hello!";

00000054 mov eax,dword ptr ds:[02A756F8h]

0000005a mov dword ptr [ebp-4Ch],eax

a的地址指向02A62208h,b的地址也是02A62208h,这说明了什么,创建b的时候net机制肯定是先去查找内存中是否有这个字符串的内存地址,如果有则指向,没有才创建[1]

修改于2012510

不知道你具体要问什么

以上就是关于字符指针变量string的地址,是怎么回事全部的内容,包括:字符指针变量string的地址,是怎么回事、用c语言如何获取内存地址、如何得到并打印出一个字符串的地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9820248.html

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

发表评论

登录后才能评论

评论列表(0条)

保存