2018年6月26日

 

 

/*
*copyright(c) 2018,HH
*All rights reserved.
*作 者:HH
*完成日期:2018年6月26日
*版本号:v1.0
*
*问题描述:取地址运算符&,指针运算符*的使用;
*输入描述:输入一个变量,一个指针变量,对指针变量进行运算;
*程序输出:输出结果。
*/

#include<stdio.h>

int main()
{
    int a=3;
    int *p=&a;
    int b=*p+3;
    int point=&*p;
    int c=*&b;
    printf("%d \n",*p);
    printf("%d \n",b);
    printf("%d \n",point);
    printf("%d \n",c);
    return 0;
}

/*
*copyright(c) 2018,HH
*All rights reserved.
*作 者:HH
*完成日期:2018年6月26日
*版本号:v1.0
*
*问题描述:取地址运算符&,指针运算符*的使用;
*输入描述:输入一个变量,一个指针变量,对指针变量进行运算;
*程序输出:输出结果。
*/

#include<stdio.h>

int main()
{
    int a=3;
    int *p=&a;
    int b1=&a;
    int b2=p;
    int c=*p+3;
    int d=&*p;
    int e=*&p;
    int f0=*(p+0);
    int f1=*(p+1);
    int f2=*(p+2);
    int f3=*(p+3);
    int f4=*(p+4);
    int f5=*(p+5);
    int f00=&*(p+0);
    int f11=&*(p+1);
    int f22=&*(p+2);
    int f33=&*(p+3);
    int f44=&*(p+4);
    int f55=&*(p+5);
    int h0=(p+0);
    int h1=(p+1);
    int h2=(p+2);
    int h3=(p+3);
    int h4=(p+4);
    int h5=(p+5);
    printf("*p=&a:%d \n",*p);
    printf("b1=&a:%d \n",b1);
    printf("b2=p:%d \n",b2);
    printf("c=*p+3:%d \n",c);
    printf("d=&*p:%d \n",d);
    printf("e=*&p:%d \n",e);
    printf("f0=*(p+0):%d \n",f0);
    printf("f1=*(p+1):%d \n",f1);
    printf("f2=*(p+2):%d \n",f2);
    printf("f3=*(p+3):%d \n",f3);
    printf("f4=*(p+4):%d \n",f4);
    printf("f5=*(p+5):%d \n",f5);
    printf("f00=&*(p+0):%d \n",f0);
    printf("f11=&*(p+1):%d \n",f1);
    printf("f22=&*(p+2):%d \n",f2);
    printf("f33=&*(p+3):%d \n",f3);
    printf("f44=&*(p+4):%d \n",f4);
    printf("f55=&*(p+5):%d \n",f5);
    printf("h0=*&(p+0):%d \n",h0);
    printf("h1=*&(p+1):%d \n",h1);
    printf("h2=*&(p+2):%d \n",h2);
    printf("h3=*&(p+3):%d \n",h3);
    printf("h4=*&(p+4):%d \n",h4);
    printf("h5=*&(p+5):%d \n",h5);
    return 0;
}

指针变量的类型需要与指向的变量的类型一致!

&取地址运算符

*间接访问运算符

指针变量在未定义指向某一变量时,不能直接指向某一固定的地址(不能*p=10这种操作),因为内存是严格管理的,不能随意读取,否则运行程序时会报错。

上句话的意思就是:不能对未赋值的指针变量,做指向运算!



 
/*
*copyright(c) 2018,HH
*All rights reserved.
*作 者:HH
*完成日期:2018年6月26日
*版本号:v1.0
*
*问题描述:利用交换指针地址,比较两个数的大小并输出;
*输入描述:输入两个数;
*程序输出:输出正确的max和min;
*备注:p1,p2的值,即其指向单元的地址被交换了,这种交换并未对a和b两个保存实型数据的单元造成影响。
*/

#include <stdio.h>

int main()
{
    int a,b,*p1,*p2,*p3;
    p1=&a;
    p2=&b;
    scanf("%d %d",&a,&b);
    if(a<b)
    {
       p3=p1;
       p1=p2;
       p2=p3; //交换指针
    }
    printf("a=%d b=%d\n",a,b);
    printf("max=%d min=%d\n",*p1,*p2);
    return 0;
}

 

 

 

 

以上的方法:p1,p2的值,即其指向单元的地址被交换了,这种交换并未对a和b两个保存实型数据的单元造成影响。

/*
*copyright(c) 2018,HH
*All rights reserved.
*作 者:HH
*完成日期:2018年6月26日
*版本号:v1.0
*
*问题描述:输入加法式子,并判断后输出结果;
*输入描述:输入int+int;
*程序输出:加法的结果或提示不是加法;
*/

#include <stdio.h>
int main()
{
    int a,b,c;
    char op;
    scanf("%d%c%d",&a,&op,&b);
    //scanf("%d%c%d\n",&a,&op,&b);加了个\n,则输入的时候需要多输入一个字符或数才可以
    if(op=='+')
    {
       c=a+b;
       printf("运算结果是:%d\n",c) ;
    }
    else
    {
       printf("不是加法,不运算!\n");
    }
    return 0;
}

为什么会有这种差异:a+0 vs 0+a识别的结果不一样!

 

 

在scanf函数中:%f代表的是float型,%lf代表double;

而在printf函数中:%f代表double型,%lf代表长双精即longdouble。


 
/*
*copyright(c) 2018,HH
*All rights reserved.
*作 者:HH
*完成日期:2018年6月26日
*版本号:v1.0
*
*问题描述:体验换行符在printf函数中是应用;
*输入描述:;;
*程序输出:;。
*体验"d","8d","o","8o","x","8x","X","8X"
*体验"%m.nf";m代表总位数(总宽度),n代表小数点后保留n位
*%m.nf\n,若实际整数部分小于(m-n),则整数部分按实际显示,不在最高位前补0.
*/

#include <stdio.h>
int main()
{
    printf("HELLO WORLD123!\n");
    printf("Welcome\nTo\nBeiJing\n!\n");
    printf("%d+%d=%d\n",2,3,5);
    printf("%4.2f+%6.3f=%8.4f\n",2.1,2.9,10.0);
    printf("%d\n",1234);
    printf("%8d\n",1234);
    printf("%o\n",1234);
    printf("%8o\n",1234);
    printf("%x\n",1234);
    printf("%8x\n",1234);
    printf("%X\n",1234);
    printf("%8X\n",1234);
    printf("%10.7f\n",1.1);
    printf("%e\n",12345.12345);
    printf("%E\n",123456.123456);
    return 0;
}

 

 

 

 

/*
*copyright(c) 2018,HH
*All rights reserved.
*作 者:HH
*完成日期:2018年6月26日
*版本号:v1.0
*
*问题描述:体验printf函数中("%格式描述\n,参数");
*格式描述与参数类型必须一致
*输入描述:;;
*程序输出:;。
*/

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d",&a,&b);
    c=a+b;
    printf("%d\n",c);
    printf("%d+%d=%d\n",a,b,c);
    printf("%f\n",c);
    //当格式描述与参数类型不一致时,输出会放生错误。
    //则报错:warning:format '%f' experts argument of type 'double',but argument 2 has type 'int'
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值