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语言如何获取内存地址、如何得到并打印出一个字符串的地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)