指针视频120-130

121

p = &i;

p保存了i的地址,因为p保存i

如果一个指针指向了普通变量,则指针变量完全等同于普通变量

*p 就是以p的内容(i的地址)为地址的变量*p=i

修改p的值不会改变i的值,修改i的值不会改变p的值

指针就是地址

地址就是内存单元的编号

指针变量是存放地址的变量

指针和指针变量是不同的概念

int main (void)

int*p;

int j;

p = &i;

j = *p;

printf("i=%d,j=%d,i,j");

return 0;

122

指针存放复杂的数据结构

快速的存放数据,时间短,耗用内存小

使函数返回一个以上的值

能够方便地处理字符串

直接访问硬件(地址)

是理解面向对象语言中应用的基础

指针是C语言的灵魂

指针定义:

地址:从0开始的非负整数

范围:一般最大内存条为4G

指针分类:

基本类型

指针和数组

指针和函数

CPU可以直接控制内存条

内存条速度快

控制总线,数据总线,地址总线

CPU读取内存条信息,处理完之后返回给内存条,内存条达到一定量时一次性写入硬盘

数据线:传输数据

控制线:控制方向

地址:对应单元

32位电脑:2^32B=4G

范围(0~4^1024—1)

123

指针变量就是存放内存单元编号的变量,指针变量就是存放地址的变量

124

指针的本质是操作受限(只能进行减法)的非负整数

126

#include<stdio.h>

int main (void)

{

int * p;

int i =5;

*p = i;

printf("%d", *p);

return 0;

}

p指向未知地址,*p不一定等于 i

{
int i = 5

int * p;
int * q;

p = &i ;

*q = *p;(越界,没有定义q)

printf(%d\n,*q);

{

int i =5;

int *p;

int *q;

p = &i;

q=p;

printf("%d\n",*q);

但是q有可能内部是垃圾值,所以*q 不能读,没有分配*q的空间

q没有被定义,所以*q的权限不能访问,不能输出*q

动态空间:多个指针b指向同一地址

不能多次释放,程序奔溃

释放一次

free(p)

不释放导致内存泄漏,内存越来越少

127

#include <stdio.h>

void huhuan_1<int a, int b>

{

int t;

t = a ;

a = b;

b = t;

return;

}

int main(void)

{

int a = 3;

int b ==5;

huhuan(a,b);

printf("a = %d, b = %d\n", a, b)


#include<stdio.h>

void huhuan_2(int * p, int * q)

{

int *t

*t=a;

a=b;

b=t;

}

int main (void)

{

a = 3;

b = 5;

huhuan_2(&a,&b);

printf(a = %d,b = %d\n, a,b);

return 0 ;

}

只是换了形式参数pq保存的地址,没有更改ab的地址,ab的值也没变

#include <stdio.h>

void huhuan_3(int*p,int*q)

{

int t

t = *p;

*p = *q;

*q = t;

}

int main(void)

{

int a = 3;

int b = 5;

huanhuan_2(&a,&b);

printf("a=%d,b=%d\n,a ,b)

return 0;
}

调用函数里面的变量名称类型要和形式参数里面的变量类型一样

128

*含义:乘法

            定义指针//定义一个名字叫p的变量,int*表示p只能存放int的地址

            指针运算符:该运算符放在已经定义好的指针变量前面,如果p是一个已经定义好的指针变量,则*p表示以p为地址的变量

129

单引号用在字符A

双引号用在字符串上

实参和形参不是同一个变量

字符(里面有逗号)说明有形参

首先为形参分配空间,所以一定是不同的变量。把实参的值发送给形参,执行完函数之后,执行printf语句,此时空间已经被释放

地址用pq,整型用i,浮点型用xy,指点型用pqrs

实参变量名发送给形参变量名

#include <stdio.h>

void swap_2(int * p,int * q)

{

int t;

t = *p;

*p = *q;

*q = t;

}

int main(void)

int a =3;

int b = 5;

swap_2(&a, &b);

printf(a = %d, b=%d \n,a , b);

return 0 ;

}

include <stdio.h>

int main(void)

int *p;

int i=5;

char ch='A';

p = &i;

*p = 99;

printf("i = %d,p = %d\n,p ,i);

return 0 ;

}

return 是结束的意思,只能执行一次return,f只能返回一个值,只能修改一个值

如何通过被调函数修改主调函数的值

实参必须为该普通变量的地址

形参必须为指针变量

在被调函数中通过*形参名的方式就可以修改主调函数相关变量的值

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容