首页 > 其他 > 详细

11-指针

时间:2014-04-13 10:56:35      阅读:688      评论:0      收藏:0      [点我收藏+]

一、  指针前奏

1.     指针的重要性

指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。

2.    小需求

l   void change(int  n)函数调用完毕后,改变实参的值

l   分析:修改实参的值->找到存储空间->地址

 

二、    指针变量的定义

1.     定义的格式

l   类名标识符  *指针变量名;

l   int *p;

2.     先定义后赋值

l   简单取值

int a = 10;

int *p;

p = &a;

printf(“%d”, *p);

l   简单改值

*p = 9;

3.     定义的同时赋值

int a = 10;

int *p = &a;

4.     实现修改实参

5.     注意点

  •   int *p;   p = 1000;
  •   int *p;   *p = 100;
  •   int *p;  *p = &a;
  •   %p输出指针里面存储的地址值
  •   其他指针类型说明,比如float *p;  char *p;
  •    不能乱用类型,比如int a = 10;  float *p = &a;

6.     清空指针

l   p = 0;

l   p = NULL;

 

7. 指针小结

     变量类型  变量名;

     格式:变量类型 *变量名;

     定义了一个指针变量p

     指针变量只能存储地址

     指针就一个作用:能够根据一个地址值,访问对应的存储空间

     指针变量p前面的int:指针变量p只能指向int类型的数据

 

三、    指针实例 

  1. void swap(char *a, char *b)  (注意temp=a;  a = b; b = temp;

    

bubuko.com,布布扣
#include <stdio.h>
void swap(int *v1, int *v2);

int main()
{
    /*
    int a = 10;
    int b = 11;
    
    swap(&a, &b);
    */
    
    
    int a2 = 90;
    int b2 = 89;
    
    swap(&a2, &b2);
    
    printf("a2=%d, b2=%d\n", a2, b2);
    return 0;
}

/* 不能交换外面实参的值,仅仅是交换了内部指针的指向
void swap(int *v1, int *v2)
{
    int *temp;
    temp = v1;
    v1 = v2;
    v2 = temp;
}*/

// 完成两个整型变量值的互换
void swap(int *v1, int *v2)
{
    int temp = *v1;
    *v1 = *v2;
    *v2 = temp;
}

/* 交换的只是内部v1、v2的值
void swap(int v1, int v2)
{
    int temp = v1;
    v1 = v2;
    v2 = temp;
}*/
bubuko.com,布布扣

 

  2.int sumAndMinus(int a, int b, int *minus)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int sumAndMinus(int n1, int n2, int *n3);
 
int main()
{
    int a = 10;
    int b = 7;
     
    // 存储和
    int he;
    // 存储差
    int cha;
    c
    he = sumAndMinus(a, b, &cha);
     
    printf("和是%d, 差是%d\n", he, cha);
     
    return 0;
}
 
// 返回值是
int sumAndMinus(int n1, int n2, int *n3)
{
    *n3 = n1 - n2;
     
    return n1 + n2;
}

  

 

四、    指针探究

  1. 指针变量所占用的存储空间
  2. 为何指针变量要分类型?

int i = 2;

char c = 1;

int *p = &c;

printf(“%d”, *p);

 

 

五、    指针与数组

1.     指向一维数组元素的指针

2.     用指针遍历一维数组元素

l   先遍历char数组(‘i’,’t’),再遍历int类型数组

l   *(p+i)和*(p++)的区别

l   a+i和a++

l   p[0]、p[1]

六、    指针与字符串

1.     字符串回顾

char s[] = “mj”;

2.     其他定义字符串的方式

char *s = “mj”;

或者

char *s;

s = “mj”;

3.     两种定义方式的区别

l   内存分析

l   画图分析

l   常量和变量字符串的区别

l   常量的内存地址查看

4.     习题

1>   编写一个int string_len(char *s),返回字符串s的字符长度

 

七、    返回指针的函数

l   指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的

l   返回指针的函数的一般形式为:类型名 * 函数名(参数列表)

 

八、    指向函数的指针

1.     为什么指针可以指向一个函数?

函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

2.     指向函数的指针的定义

定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);

3.     使用注意

l   由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的

l   指向函数的指针变量主要有两个用途:

  • 调用函数
  • 将函数作为参数在函数间传递

4. 存放特点

 1.常量区

 存放一些常量字符串 

 2.

 对象

 3.

 存放局部变量

 掌握:

 定义字符串的2种方式

 1> 利用数组

 char name[] = "whb";

  * 特点:字符串里面的字符是可以修改的

  * 使用场合:字符串的内容需要经常修改

 2> 利用指针

  char *name = "whb";

  * 特点:字符串其实是一个常量字符串,里面的字符是不能修改

  * 使用场合:字符串的内容不需要修改,而且这个字符串经常使用

 

11-指针,布布扣,bubuko.com

11-指针

原文:http://www.cnblogs.com/lszwhb/p/3661609.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!