(小白文,多多指教)
1. *运算符与间接访问
(1)间接引用要用间接引用运算符* 来实现,语法格式 *指针表达式
#include <stdio.h>
int main ()
{
char x='A';
double y=3;
//*(&x)和*(&y)分别是char和double类型的变量,他俩就等价于x和y
printf(" &x=%c\n",x);
printf(" &y=%f\n",y);
printf(" *(&x)=%c\n",*(&x));
printf(" *(&y)=%f\n",*(&y));
return 0;
}
运行结果:
&x=A
&y=3.000000
*(&x)=A
*(&y)=3.000000
(2)利用指针访问类型不匹配的变量
如果指针的基类型不匹配,尽管指针指向正确,结果会错误i
#include <stdio.h>
#include <stdlib.h>
int main()
{
double x=3;
char *p;
p=(char*)(&x); //指向x
*((double*)p) =3.5; //为x赋值
printf(" *p=%p\n",*p);
printf(" *((double*)p)=%lf",*((double*)p));//读出x的值并输出
return 0;
}
经过赋值后指针p的值与&x相同,即p已指向x,但*p是char型,只由x的1个字节构成。
运行结果:
*p=0000000000000000
*((double*)p)=3.500000
--------------------------------
Process exited after 0.08786 seconds with return value 0
请按任意键继续. . .
*((double*)p)才是与x相同的变量
2.求固定半径的周长,面积,表面积,体积
这个水题,很简单,没啥说的
#include <stdio.h>
#define PI 3.14
float L(r){
return 2*r*PI;
}
float S(r){
return PI*r*r;
}
float BMJ(r){
return 4*PI*r*r;
}
float V(r){
return (4/3)*PI*r*r*r;
}
int main ()
{
float r=10;
printf(" %f %f %f %f",L(r),S(r),BMJ(r),V(r));
return 0;
}
3.题目 输出下面的图案
*
***
*****
*******
*****
***
*
可以把这个图案看作两部分,从第一行到第四行,从第1行到第3行
可以观察到:第1行有3个空格,1个*
第2行有2个空格,3个*
第3行有1个空格,5个*
第4行有0个空格,7个*
设i为行数,j为空格数,k为*数
所以前4行有,j=4-i,k=2*i-1
接着有
第1行有1个空格,5个*
第2行有2个空格,3个*
第3行有3个空格,1个*
所以后3行有,j=i,k=7-2*i
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,k;//代表行数,j代表空格数,k为*个数
for(i=1;i<=4;i++){
for(j=1;j<=4-i;j++){ printf(" "); }
for(k=1;k<=2*i-1;k++){printf("*"); }
printf("\n");
}
for(i=1;i<=3;i++){
for(j=1;j<=i;j++){ printf(" "); }
for(k=1;k<=7-2*i;k++){ printf("*"); }
printf("\n");
}
}