C语言为什么两种办法输出的地址不一样

#include <stdio.h>

int main(){
int num[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int *p=&num[0][0];
int i;
for(i=0;i<9;i++){
printf("%p\n",*p+i);
}
printf("\n\n\n");

int j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%p\n",&num[i][j]);
}
}

return 0;
}

为什么两种办法输出的数组元素的地址不一样?有什么区别吗?

第一个printf("%p\n",*p+i);,p前面多了个星号,*p等于1,结果是 1+i,如果要显示地址p前面不要加星号
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-20
printf("%p\n",*p+i); 这句话 把 " * " 去掉
第2个回答  2014-08-20
因为你多加了个*号
改为
for(i=0;i<9;i++){
printf("%p\n",p+i);//地址没有*号的
}
第3个回答  2014-08-20
printf("%p\n",*(p+i) );

C语言为什么两种办法输出的地址不一样
第一个printf("%p\\n",*p+i);,p前面多了个星号,*p等于1,结果是 1+i,如果要显示地址p前面不要加星号

C语言编程中通过&p和p指令获取的内存地址是不一样的
当然不用一样。p是指针变量,和一般变量不同的是,它里面存放的是一个地址。(你这里p存放的就是ch变量的地址)。&是取地址符号,取的是变量的地址。是取指针所指向的地址的值。(这里p指向的是ch,所以对*p赋值,就等同于对ch赋值)。所以你打印p是变量ch的地址,而你打印&p打印的是变量p的地...

初学c语言,为啥这个程序打印出的地址会不一样呢?地址应该一样才对啊...
printf("p的地址是%p\\n",p); \/\/这样才是一样的

为什么函数两次调用输出的结果会不同,第二个是什么原因? C语言
你第一个调用的是数组第3个元素的值,第2次调用的是储存第3个元素的地址,如果你想达到同样的效果,用指针符号‘*’来输出

请问下c语言里:(short *)&p[2] 和(short) *&p[2] 为什么输出不一样?
前面的是吧指向p[2]的指针强制转成short指针,后面的*&抵消了,相当于(short)p[2],前面的是一个地址,后面的是地址指向的变量

C语言为什么两种写法结果不一样?
第一张图显示的是数值,第二张图显示的是一个指针的内存地址。第二张图显示没意义。

C语言指针,指针变量函数传递为什么地址不一样?
4行 和 10行 去掉 &, 输出指针直接用p就行。 用&就变成取指针的存储地址了,不一样

c语言为什么先定义的数组地址大而后定义的数组地址小
首先你需要了解栈和堆的概念,函数内的变量都是从栈中分配的,malloc的都是从堆中分配的;堆是向上增长(由低到高),栈是向下增长(由高到低)你的数组a和b都是函数变量,是栈空间分配的,所以a的地址小于b

C语言问题:输入1 2 3输出:地址 地址 1 哪里不对啊?
1.注意输入1 2 3 这三个数据时,要在数据间加逗号。(不信的话看看你输入语句)2.还有就是exchange()函数中if (*q1<*q3) swap(q2,q3);错误,按你的思路应该q2要改成q1吧!!呵呵呵。。3.最后由于你的函数有多个getchar()要回车多次,才能执行到printf("\\n%d %d %d\\n",a,b,c);...

C语言,为什么我调用函数输出的和主函数输出的不一样
char p[30],*a=p; a指向的是函数内部的p[30] 函数回去以后返回的a指向地址为空。

相似回答