总结作业二:
void swap(int *p,int *q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换?
编译错误,涉及到指针如何赋初值:指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。那么可将该代码修改如下,消除了error,但是结果是否正确?
1 #include <stdio.h> 2 void swap(int *pi,int *pj); 3 4 int main(void) { 5 int a=5; 6 int b=8; 7 swap(&a,&b); 8 printf("a=%d,b=%d ",a,b); 9 return 0; 10 } 11 12 void swap(int* i,int* j){ 13 int *t=i; 14 *i=*j; 15 *j=*t; 16 }
void swap(int *p,int *q){int *m;m=p;p=q;q=m;}为何无法实现交换?
交换的只是指向,并没有交换数值。
复习指针与数组:
(1)定义一个包含有10个整数的数组a:
int a[10];
(2)定义一个指针变量p,p指向数组a:
int *p=a;
int *p=&a[0];
(3)引用数组a中第i个元素:
a[i];
*(a+i);
*(p+i);
p++;*p;
(4)定义函数fun,参数是数组a,输出数组中各元素的值:
void fun (int a[10]);
void fun (int a[]);
void fun (int *a);
void fun (int *p);
1 #include <stdio.h> 2 3 void fun(int * a){ 4 int *q=a; 5 while((q-a)<10) 6 printf("%d ",*(q++)); 7 } 8 9 int main(){ 10 int a[10]={1,2,3,4,5,6,7,8,9,10}; 11 int *p=a; 12 printf("%d ",p[5]); 13 fun(p); 14 return 0; 15 }
(5)定义函数inv,将数组a中10个整数按相反顺序存放。(看情况上课时间不够作为课下作业)
复习指针与字符串:
(1)定义一个字符串str,初值hello world:
char str[] = “hello world”;
char *str = “hello world”;
(2)修改字符串str的值为Hello World:
字符数组存的是字符,字符指针存的是字符串在内存中的首地址。
(3)定义函数funstr,参数是字符串str,函数输出字符串:
格式符:%s、%c