}
max(int x, int y) { int z;
z=x>y? x : y; return(z) ; }
运行结果为: Max is 8
指针
1.
# include < stdio .h > main ( )
{ int x[ ] = {10, 20, 30, 40, 50 }; int *p ; p=x;
printf ( “%d”, *(p+2 ) ); } 运行结果为: 30
首先定义一个整型数组x,x的长度为5;然后定义一个指针变量p;对p进行初始化,将数组x的地址赋给p。因此此时p中存放的数组x的首地址,即数组中第一个元素x[0]的地址。
然后执行printf语句,输出表达式*(p+2)的值。p+2表示以p当前指向的位置起始,之后第2个元素的地址,即a[2]的地址。*(p+2)则表示该地址内所存放的内容,即a[2]的值30,因此输出30
2.
#include
{ char s[]=”abcdefg”; char *p; p=s;
printf(“ch=%c\\n”,*(p+5)); }
运行结果为: ch=f
首先定义一个字符型数组s,并用字符串abcdefg对s进行初始化; 然后定义一个字符型指针变量p; 对p进行初始化,将数组s的地址赋给p。因此此时p中存放的数组s的首地址,即数组中第一个元素s[0]的地址。
然后执行printf语句,输出表达式*(p+5)的值。p+5表示以p当前指向的位置起始,之后
第5个元素的地址,即a[5]的地址。*(p+5)则表示该地址内所存放的内容,即a[5]的值f, 因此输出ch=f
3.
#include
{ int a[]={1, 2, 3, 4, 5} ; int x, y, *p; p=a;
x=*(p+2);
printf(\:%d \\n\; }
运行结果为: 1:3
首先定义一个整型数组a,并对a进行初始化; 然后定义整型变量x,y,整型指针变量p; 再将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中第一个元素a[0]的地址。执行x=*(p+2);p+2表示以p当前所指向的位置起始,之后第2个元素的地址,即a[2]的地址。*(p+2)则表示该地址内所存放的内容,即a[2]的值3,然后再把3赋给x
然后执行printf语句,先输出表达式*p的值。此时*p表示的是p所指向变量的内容,即a[0]的值1。再输出一个冒号。然后再输出x中的值3。
4.
#include
{ int arr[ ]={30,25,20,15,10,5}, *p=arr; p++;
printf(“%d\\n”,*(p+3)); }
运行结果为:10
首先定义一个整型数组arr,并对arr进行初始化; 然后定义整型指针变量p; 再将数组arr的地址赋给p。因此此时p中存放的数组arr的首地址,即数组中第一个元素a[0]的地址。
执行p++,即p=p+1。p+1表示以p当前所指向的位置起始,之后第1个元素的地址,即arr[1]的地址,然后再将arr[1]的地址赋给p,执行完此语句后,p不再指向arr[0],而是指向arr[1]。
然后执行printf语句,输出表达式*(p+3)的值。p+3表示以p当前指向的位置起始(此时p指向arr[1]),之后第3个元素的地址,即arr[4]的地址。*(p+3)则表示该地址内所存放的内容,即arr[4]的值10, 因此输出10
5.
#include
{ int a[ ]={1, 2, 3, 4, 5, 6};
int x, y, *p; p = &a[0]; x = *(p+2); y = *(p+4);
printf(“*p=%d, x=%d, y=%d\\n”, *p, x, y); }
运行结果为: *p=1, x=3, y=5
首先定义一个整型数组a,并对a进行初始化; 然后定义整型变量x,y,整型指针变量p; 再将数组元素a[0]的地址赋给p。
执行x=*(p+2);p+2表示以p当前所指向的位置起始,之后第2个元素的地址,即a[2]的地址。*(p+2)则表示该地址内所存放的内容,即a[2]的值3,然后再把3赋给x
执行y = *(p+4); p+4表示以p当前所指向的位置起始,之后第4个元素的地址,即a[4]的地址。*(p+4)则表示该地址内所存放的内容,即a[4]的值5,然后再把5赋给y
执行printf语句,先输出表达式*p的值。此时*p表示的是p所指向变量的内容,即a[0]的值1。再输x的值3。再输出y的值5。
6.
#include
{ static char a[ ]=”Program”, *ptr; for(ptr=a, ptr 运行结果为: Porm 首先定义一个字符型数组a,并对a进行初始化; 然后定义字符型指针变量p; 执行for语句 ptr=a为表达式1,将数字a的地址赋给ptr;表达式2(循环条件)ptr 执行putchar(*ptr); 即输出*ptr所对应的字符。此时ptr指向数组中的第1个元素,即 a[0],因此*ptr表示a[0]中的值,即’P’. 执行完循环体,转向执行表达式3,即ptr= ptr+2。ptr+2表示以ptr当前所指向的位 置起始,之后第2个元素的地址,即a[2]的地址,然后将a[2]的地址赋给ptr。a[2]的地 址等价于a+2,因此循环条件ptr 执行putchar(*ptr); 即输出*ptr所对应的字符。此时ptr指向数组中的第3个元素,即 a[2],因此*ptr表示a[2]中的值,即’o’. 执行完循环体,转向执行表达式3,即ptr= ptr+2。ptr+2表示以ptr当前所指向的位 置起始,之后第2个元素的地址,即a[4]的地址,然后将a[4]的地址赋给ptr。a[4]的地 址等价于a+4,因此循环条件ptr 执行putchar(*ptr); 即输出*ptr所对应的字符。此时ptr指向数组中的第5个元素,即 a[4],因此*ptr表示a[4]中的值,即’r’. 执行完循环体,转向执行表达式3,即ptr= ptr+2。ptr+2表示以ptr当前所指向的位 置起始,之后第2个元素的地址,即a[6]的地址,然后将a[6]的地址赋给ptr。a[6]的地址等价于a+6,因此循环条件ptr 执行putchar(*ptr); 即输出*ptr所对应的字符。此时ptr指向数组中的第7个元素,即 a[6],因此*ptr表示a[6]中的值,即’m’.