【黑马程序员】————指针

一、指针变量的定义

1. 格式:变量类型 *指针变量名;
2. 举例:int *p; char *p2;
3. 注意:定义变量时的*仅仅是指针变量的象征

4.指针变量只能存储地址

5.指针就一个作用:能够根据一个地址值,访问对应的存储空间
6.指针变量p前面的int:指针变量p只能指向int类型的数据

7.任何指针都占用8个字节的存储空间

二、利用指针变量简单修改其他变量的值

1.指向某个变量

int a;

int *p;
p = &a;
或者
int *p = &a;

2.修改所指向变量的值
*p = 10;                                 //这个时候的*的作用:访问指向变量p指向的存储空间

3.在函数内部修改外面变量的值
int a = 10;
change(&a);

void change(int *n)
{
*n = 20;
}

4.清空指针

  p = 0;

  p = null;

5.指针变量未经过初始化,不要拿来间接访问其他存储空间

三、指针与数组

将数组当做函数参数传入时,会自动转为指针,

  1>利用一个指针来接收一个数组,指针变量p指向了数组的首元素
                  p = &ages[0];

  2>数组名就是数组的地址,也是数组首元素的地址
                  p = ages;

1.数组元素的访问方式
  int ages[5];
  int *p;
  p = ages;
  1> 数组名[下标] ages[i]
  2> 指针变量名[下标] p[i]
  3> *(p + i)

  /*
  p ---> &ages[0]
  p + 1 ---> &ages[1]
  p + 2 ---> &ages[2]
  p + i ---> &ages[i]
  */

2.指针变量+1,地址值究竟加多少,取决于指针的类型
  int * 4
  char * 1
  double * 8

四、指针与字符串

1.定义字符串的2种方式
  1> 利用数组
    char name[] = "itcast";
    * 特点:字符串里面的字符是可以修改的
    * 使用场合:字符串的内容需要经常修改

  2> 利用指针
    char *name = "itcast";
    * 特点:字符串其实是一个常量字符串,里面的字符是不能修改
    * 使用场合:字符串的内容不需要修改,而且这个字符串经常使用

2.定义字符串数组
  1> 利用二维字符数组
    char names[2][10] = {"jack", "rose"};

  2> 利用指针数组
    char *names[2] = {"jack", "rose"};

3.指针变量指向字符串的首字符

五、返回指针的函数

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

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

 1 #include <stdio.h>
 2 char *test();
 3
 4 /*
 5  只要求能看懂
 6  */
 7
 8 int main()
 9 {
10     char *name = test();
11
12     printf("name=%s\n", name);
13
14     return 0;
15 }
16
17 char *test()
18 {
19     return "rose";
20 }

六、指向函数的指针

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

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

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

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

3.      使用注意

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

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

    调用函数

    将函数作为参数在函数间传递  

 

 1   void test1()
 2   {
 3       // (*p)是固定写法,代表指针变量p将来肯定是指向函数
 4       // 左边的void:指针变量p指向的函数没有返回值
 5       // 右边的():指针变量p指向的函数没有形参
 6       void (*p)();
 7
 8       // 指针变量p指向了test函数
 9       p = test;
10
11      p();
12      //(*p)(); // 利用指针变量间接调用函数
13
14      //test(); // 直接调用函数
15  }

七、指向指针的指针

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a = 10;
 5
 6     int *p = &a;
 7
 8     int **pp = &p;
 9
10     // a = 20;
11
12     // *p = 20;
13
14     /*
15     (*pp) == p
16
17     *(*pp) == *p = a
18
19     **pp == *p = a
20     */
21     **pp = 20;
22
23     printf("%d\n", a);
24
25     //int ***ppp = &pp;
26
27     /*
28     char a2 = ‘A‘;
29     char *p2 = &a2;
30     */
31
32     return 0;
33 }

【黑马程序员】————指针

时间: 2025-01-18 09:44:28

【黑马程序员】————指针的相关文章

黑马程序员-----指针

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 第一讲  指针的基本概念 一.基本概念 内存单元的编号叫做地址.   //根据内存单元的编号或地址就可以找到所需的内存单元,所以通常把这个地址称为指针. 内存单元的指针和内存单元的内容是两个不同的概念. 总结:对于一个内存单元来说,单元的

黑马程序员-----指针函数和函数指针

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲 指针函数 一.指针函数的概念 所谓函数类型是指函数返回值的类型,在c语言中允许一个函数的返回值是一个指针(地址),这种返回指针的函数称为指针型函数. 二.指针函数的定义 定义指针型函数的一般形式为: int  *sum(int a,i

黑马程序员——c语言学习心得—— 指针

黑马程序员——c语言学习心得—— 指针 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,打开文件fopen(文件名,打开方式);例如:FILE *fp = fopen("a1","r");  返回的是文件的指针(文件在内存缓冲区的首地址)fopen函数反回值 是指向 a1文件的指针,通常赋值给一个指针变量关于文件名a1 也可以是一个“路径+文件名”   c:\abc.txt----------------

黑马程序员-OC self super isa指针

self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可以代表实例对象,还可以代表类对象:谁调用当前方法,self就代表谁:如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法: self调

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比

黑马程序员学习笔记-C指针小结

黑马程序员学习笔记-C指针 1. 指针简介: 指针是C语言中非常重要的数据类型,是C语言的精华 2. 指针变量定义: 格式:类名标识符 *指针变量名; 指针变量只能存储地址 指针就一个作用:能够根据一个地址值,访问对应的存储空间 指针变量p前面的int:指针变量只能指向int类型的数据 3.实例: 4. 注意点: 指针变量只能存储地址.指针变量未经初始化,不要拿来间接访问其他存储空间.指针变量的初始化可以int *p = &a;也可以拆分成两句:int *p; p =&a;.定义变量时的*

黑马程序员------IO(五)

黑马程序员------IO(五) 1.1  操作对象(示例1)ObjectInputStream与ObjectOutputStream 被操作的对象需要实现Serializable. Serializable:用于给被序列化的类加入ID号,用于判断类和对象是否是同一个版本 类通过实现java.io.Serializable接口以启用序列化功能,Serializable只是一个标记接口. 1 示例1: 2 import java.io.*; 3 4 class ObjectStreamDemo 5

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员_C语言总结-基础部分

C语言基础 1.C语言的关键字 1>关键字就是C语言提供的有特殊含义的符号,也称为保留字,C语言中一共有32个关键字,这些关键字都有自己的含义 例如:int double float if  else switch for 等等 2.标示符的概念: 1>标示符就是在程序中自定义的一些名称,比如函数名,变量名,结构体名等等这些都是标示符 2>命名规则: 1>只能由英文字母的大小写和数字以及_下划线组成,且首字母必须为字母或者下划线_ 2>在C语言中是严格区分大小写的,比如if是