①void指针:
不确定数据类型的指针变量,它可以通过强制类型转换让改变量指向指向任何数据类型的变量。
void * <指针变量名称>
▲
int m = 10;
double n = 3.14;
void * p,*q;
p = (void *)&m;
printf ("%d %d\n",m,*(int *)p);
q = (void *)&n;
printf ("%.2lf %.2lf\n",*(double *)q);
return 0;
▲
int a [] = {5,2,5,3,2,4};
int i,n;
void * q;
int * p;
q = a;
p = (int *)q;
n = sizeof(a) / sizeof (int);
for (i = 0;i<n;i++)
printf ("%d",*(P+1));
puts("");
return 0;
②const
const修饰谁谁不能改动。
int m =10;
const int * p;
int * const q = &m;
const int * const = &m;
p = &m;// right
(*p)++;//error
q = &m;// error
*q = 20;//right
r++;// error
(*r)++;// error
③函数:
函数的说明就是指函数原型
函数的调用
函数的实现
▲X的n次幂
#inlude <stdio.h>
double power (double,int);
int main ()
{
double x,ret;
int n;
printf ("input:");
scanf ("%lf %d",&x,&n);
ret = power(x,n);
printf("%lf %d = %lf\n",x,n,ret);
return 0;
}
double power (double x,int n)
{
double r = 1;
int i;
for (i = 1;i<=n;i++)
r *= x;
return r;
}
④函数的参数传递
全局变量
复制传递方式:
调用函数将实参传递给被调用函数,被调用函数将创建同类型的
形参并用实参初始化;
形参是新开辟的存储空间,因此,在函数中改变形参的值,不会影响
到实参。
地址传递方式:
按地址传递,实参为变量的地址,而形参为同类型的指针
被调用函数中对形参的操作,将直接改变实参的值(被调用函数对
指针的目标操作,相当于对实参本身的操作)
▲
#include <stdio.h>
double x = 2;
int n = 3;
double power(double,int);
int main ()
{
double ret;
ret = power ();
printf ("%lf %d = %lf\n",x,n);
return 0;
}
double power ()
{
double r = 1;
int i;
for (i = 1;i<=n;i++)
r *= x;
return r;
}
▲
#include <stdio.h>
double power(double,int);
int main ()
{
double x = 2;
int n = 3;
double ret;
printf ("&x=%p &n=%p\n",&x,&n);
ret = power (x,n);
printf ("%lf %d = %lf\n",x,n,ret);
return 0;
}
double power (double a,int b)
{
double r = 1;
int i;
printf ("&a=%p &b=%p\n",&a,&b);
for (i = 1;i<=n;i++)
r *= x;
return r;
}
▲
#include <stdio.h>
void swap(int x,int y);
int main ()
{
int a = 10;
int b = 20;
printf("before:%d %d\n",a,b);
swap(a,b);
printf("after:%d %d\n",a,b);
return 0;
}
▲交换两个数的值
#include <stdio.h>
void swap (int *x,int *y);
int main ()
{
int a =10;
int b = 20;
printf ("before:%d %d\n");
swap(&a,&b);
printf ("after:%d %d\n");
return 0;
}
void swap (int * x,int *y)
{
int t;
t = *x;
*x = *y;
*y = t;
}
▲编写一个函数,统计字符串中小写字母的个数,并把字符串
中的小写字母转化成大写字母:
#include <stdio.h>
int str_fun(char *p);
int main (int argc,char *argv[])
{
char s[]="welcome2017Beijing";
int n;
n = str_fun(s);
printf ("n=%d %s\n",n,s);
return 0;
}
int str_fun(char *p)//char *p=s;
{
int num =0;
while (*p!='\0')
{//while(*p)
if (*p<='z' && *p >='a')
{num++;
*p -='';
}
p++;
}
return num;
}