| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
请大家看看,我这个程序,比小甲鱼多加了几行。printf("the addr of a is:%p\n",a);这是打印变量a的地址是吧,那因为a是char类型,出的结果是16进制“43”很好理解,可是,变量f是整形,应该占用四个字节,出来的结果不应该是16进制的一个八位的数吗如“20654821”,怎么出来的是“7C”; 
- #include <stdio.h>
 
  
- int main()
 
 - {
 
 -         char a='F';
 
 -         int f=123;
 
 -         
 
 -         char *pa=&a;//这里什么类型变量,看储存的变量地址是什么类型 
 
 -         int *pf=&f; //不管前面写的什么类型,指针变量占用的都是四个字节,本系统占用八个字节 
 
 -         
 
 -         printf("a=%c\n",*pa);
 
 -         printf("f=%d\n",*pf);
 
 -         
 
 -         *pa='C';
 
 -         *pf+=1;
 
 -         
 
 -         printf("now,a=%c\n",*pa);
 
 -         printf("now,f=%d\n",*pf);
 
 -         putchar('\n');
 
 -         
 
 -         printf("size of a=%d\n",sizeof(a));
 
 -         printf("size of f=%d\n",sizeof(f));
 
 -         printf("size of pa=%d\n",sizeof(pa));
 
 -         printf("size of pf=%d\n",sizeof(pf));
 
 -         putchar('\n');
 
 -         
 
 -         printf("the addr of a is:%p\n",a);
 
 -         printf("the addr of f is:%p\n",f);
 
 -         printf("%c\n",a);
 
 -         printf("%d\n",f);
 
 -         putchar('\n');
 
 -         
 
 -         printf("the addr of a is:%p\n",pa);
 
 -         printf("the addr of f is:%p\n",pf);
 
 -         printf("%d\n",pa);
 
 -         printf("%d\n",pf);
 
 -         return 0;
 
 - } 
 
  复制代码 
 本帖最后由 肖-肖 于 2021-4-8 15:27 编辑 
首先:printf("the addr of a is:%p\n",a);这 不是打印变量a的地址! 
解释如下: 
%p意思就是以16进制的格式输出,一般为了输出地址了。 而不是你用%p输出就是输出那个变量的地址!
地址一般都是以&开头的 
如果想要打印变量a的地址应该是:printf("the addr of a is:%p\n",&a);才对!
 
我修改了代码,应该比较容易看懂了:代码如下:
 - #include <stdio.h>
 
  
- int main()
 
 - {
 
 -         char a='F';
 
 -         int f=123;
 
  
-         char *pa=&a;//这里什么类型变量,看储存的变量地址是什么类型
 
 -         int *pf=&f; //不管前面写的什么类型,指针变量占用的都是四个字节,本系统占用八个字节
 
  
-         printf("old a=%c\n",*pa);
 
 -         printf("old f=%d\n",*pf);
 
  
-         *pa='C';
 
 -         *pf+=1;//这里f和*pf的值就都变成了124
 
  
-         printf("now,a=%c\n",*pa);//'f'
 
 -         printf("now,f=%d\n",*pf);//124
 
 -         putchar('\n');
 
  
-         printf("size of a=%d\n",sizeof(a));
 
 -         printf("size of f=%d\n",sizeof(f));
 
 -         printf("size of pa=%d\n",sizeof(pa));
 
 -         printf("size of pf=%d\n",sizeof(pf));
 
 -         putchar('\n');
 
  
-         printf("the addr of a is:%p\n",&a);
 
 -         printf("the addr of f is:%p\n",&f);
 
 -         printf("%c\n",a);
 
 -         printf("%d\n",f);
 
 -         putchar('\n');
 
  
-         printf("the addr of pa is:%p\n",pa);
 
 -         printf("the addr of pf is:%p\n",pf);
 
 -         printf("pa=%d\n",pa);
 
 -         printf("pa=%p\n",pa);//printf("the addr of a is:%p\n",&a);是和这里输出的是一样的!-->所以pa就是a的地址!
 
 -         printf("pf=%d\n",pf);
 
 -         printf("pf=%p\n",pf);
 
 -         return 0;
 
 - }
 
 
  复制代码
运行结果如下:
 - old a=F
 
 - old f=123
 
 - now,a=C
 
 - now,f=124
 
  
- size of a=1
 
 - size of f=4
 
 - size of pa=4
 
 - size of pf=4
 
  
- the addr of a is:0060FEF7
 
 - the addr of f is:0060FEF0
 
 - C
 
 - 124
 
  
- the addr of pa is:0060FEF7
 
 - the addr of pf is:0060FEF0
 
 - pa=6356727
 
 - pa=0060FEF7
 
 - pf=6356720
 
 - pf=0060FEF0
 
  
- Process returned 0 (0x0)   execution time : 1.142 s
 
 - Press any key to continue.
 
  复制代码
希望有点用吧!    
 
 
 |   
- 
 
 
 
 
 
 
 
 |