C 这些表达式做了什么;我aa=(字符*)&;A.在下面的程序中?
我试图理解指针的概念,我被程序中第6行和第7行的这种符号所束缚。请提前帮助我理解指针感谢的概念。C 这些表达式做了什么;我aa=(字符*)&;A.在下面的程序中?,c,C,我试图理解指针的概念,我被程序中第6行和第7行的这种符号所束缚。请提前帮助我理解指针感谢的概念。 我开始学习c语言中指针的基本知识,我一直在学习这个表达式 ii = (char *)&i; aa= (char *)&a; 完整代码: #include<stdio.h> int main() { int i = 54; float a = 3.14; char *ii , *aa; //declaring ii and aa as chaacter
我开始学习c语言中指针的基本知识,我一直在学习这个表达式
ii = (char *)&i;
aa= (char *)&a;
完整代码:
#include<stdio.h>
int main()
{
int i = 54;
float a = 3.14;
char *ii , *aa; //declaring ii and aa as chaacter pointer
ii = (char *)&i;
aa= (char *)&a;
printf("adress contained in ii = %u",ii);
printf("adress contained in aa = %u",aa);
printf("value at the adress contained in ii is %d " , *ii);
printf("value at the adress contained in aa = %d ", *aa);
return 0;
}
#包括
int main()
{
int i=54;
浮点数a=3.14;
char*ii,*aa;//声明ii和aa为chaacter指针
ii=(字符*)&i;
aa=(字符*)&a;
printf(“ii=%u”中包含的地址,ii);
printf(“aa=%u”中包含的地址,aa);
printf(“ii中包含的地址的值为%d”,*ii);
printf(“aa=%d”中包含的地址的值,*aa);
返回0;
}
表达式&i
生成类型为int*
(指向int
)的值,即i
的地址。类似地,&a
生成类型为double*
(指针指向double
)的值
除了void*
类型之外,C不允许您将一种类型的指针值分配给另一种指针类型的对象-IOW,您不能将int*
或double*
值直接分配给char*
对象。必须使用强制转换表达式来告诉编译器将该值视为不同的类型:
ii = (char *) &i;
表示“将&i
的结果视为指向char
的指针,并将结果分配给ii
”。(char*)
表达式是一个强制转换,它告诉编译器将以下表达式的值视为该类型
那么,你为什么要这么做
除位字段外,任何对象都可以映射到char
或无符号char
-IOW数组上,整数值0x01234567
可以视为char
值{0x01、0x23、0x45、0x67}
数组。您可以使用此属性执行一些有用的测试,或确定某些值的表示方式。例如,如果您想知道您的系统是big-endian还是little-endian,可以取int
值0x00000001
,将其视为char
数组,并测试第0个和最后一个元素:
int val = 0x00000001; // assumes 32-bit integers!
char *varr = (char *) &val; // pretends val is an array of char
if ( varr[0] == 0x01 )
// little endian
else if ( varr[ sizeof val - 1 ] == 0x01 )
// big endian
else
// something else
请注意,将指针值强制转换到不同的类型并不一定是安全的——这样做可以启用一些真正讨厌的bug 这段代码无法编译。还有更多我们没有看到的吗?你知道/理解以下哪些内容:操作符的效果
&
,“cast”(char*)
。需要这些信息来衡量您的知识水平并做出适当的回答。之所以进行强制转换,是因为变量与指针的数据类型不同。现在的问题需要一个指针教程,因此过于宽泛。请详细说明你想要解释的内容以及你已经知道的内容。那么问题就可以足够集中了。请学习。你到底不明白什么?