第九次课大纲

总结作业二:

      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\n",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 }
View Code

     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\n",*(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\n",p[5]);
13     fun(p);
14     return 0;
15 } 
View Code

  (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

    有多种方法,详见第五次课

posted on 2017-03-24 11:18  niuxiaoxia  阅读(195)  评论(0编辑  收藏  举报

导航