2 f476559604 f476559604 于 2016.03.21 14:29 提问

c语言中为什么这样赋值后,两个却一样

#include
#include
typedef struct HH
{
int i;
int j;
struct HH *next;
}HH;

void changeV(HH *p)
{
HH tt;
tt.i=6;
tt.j=2;
tt.next=&p[0];
p[0]=tt;
//tmp->i=1;
//tmp->j=2;
//tmp->next=NULL;
//p[0]=tmp;

}
int main()
{
HH h[5];
for(int i=0;i<5;i++)
{
h[i].i=0;
h[i].j=0;
h[i].next=NULL;
}
changeV(h);
printf("%d\n",h[0].next);
printf("%d\n",&h[0]);
//结果
//-1904858288
//-1904858288

return 0;
}


1个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.21 14:38
已采纳

tt.next=&p[0]; //将tt的next指针指向p[0]的地址
p[0]=tt; //将tt赋值给p[0],此时p[0].i=6,p[0].j=2,p[0].next=&p[0]
然后执行printf("%p\n",h[0].next); //h[0].next就是&p[0],所以两句打印的是一样的(打印地址应该用%p)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言中用scanf连续输入两个…
原文地址:C语言中用scanf连续输入两个字符类型的问题作者:Hoper昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main(void){   char a[100];   char k;   int i,loc;   printf("请输入字符串:");   scanf("%s",a);   printf("n请输入要插入的字符:");   
c语言中关于圆括号中以逗号赋值
今天有一仁兄发出一个问题,int a[3][2]={(0,1),(2,3),(4,5)};为何赋值给二维数组的值是1,3,5,0,0,0!在c语言中,给二维数组赋值是以{}来的,可此时的()为什么可以且会得到这个结果呢,在c语言中()是被用来赋值运算用的,那么编译器就会以为(0,1)中仅仅当作一个值传给a[0][0],根据查看汇编源码,把最近处理的1作为结果被赋值了!所以最后得出的结果就是1,3,
C语言中二维数组的赋值为什么运行出错?(已解决)
源程序如下:main(){  int i,j,a[2][3];  for(i=0;i      {       for(j=0;j            {              scanf("%d",&a[i][j]);            }      }} 经过再次运算发现没有问题,也许是在输入数字的时候用了逗号,导致出错,数字之间输
【C语言】C语言中赋值语句规则
赋值语句是由赋值表达式再加上分号构成的表达式语句。 其一般形式为: 变量=表达式; 在赋值语句的使用中需要注意以下几点: 由于在赋值符“=”右边的表达式也可以又是一个赋值表达式, 因此,下述形式 变量=(变量=表达式); 是成立的,从而形成嵌套的情形。 其展开之后的一般形式为:变量=变量=…=表达式; 例如: a=b=c=d=e=5; 按照赋值运算符的右接合性,因此实际上等效于
C语言中有关两个数,值的交换
一、开讲    最近在系统的学习C语言,虽说以前在大学里学习过,但是人嘛,时间一久就会忘了。由于行业的原因,我学习了iOS,但是想学习iOS,C就是万万不能忘的。于是经过几天的时间,我终于有了一点小成就,就是有关在C里面的两个值的交换,这里或许只是一部分,希望还有知道方法的同事,不吝赐教。下面就不多说了,我们一起来看,怎么交换两个数的值,我这里面提供了三种方法。 第一种:第三方变量交换法
c语言中的连续赋值问题
#include                                                                                                               int main()   {             int a,b,c;             a=b=c=21;             pr
c语言中整数赋值和字符赋值的一些问题
int i=289 char c='a'; c=i;这个问题,因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它,结果只能是把高位的丢掉,所以i被减了256以后赋值给了c,即低位部分赋值给了c你在c='a'时,c存的是97但你后来把i也就是289给了c,所以值溢出了,(为什么这里i被剪掉的是256呢,这个256是怎么算出来的?) 补充:289是10进制 转换到8进制是000
c语言中赋值截断
c语言中的“截断”现象
C语言比较两字符串是否相等
函数 strcmp(str1,str2) 定义在 string.h 若相等,返回0 若不等,返回ASCII码相差多少
关于C语言数组在函数之间的传值方法
搬家后的博客链接: IT客栈 www.itkezhan.org 还是用例子说话吧。 #include int arry(int *a) {  int *b;  b = a;  return b; } int main() {  int a[5] = {1,2,3,4,5};  int *c;  int i;    c = arry(a);    f