13-初识指针

一、函数的实际运行原理

函数在接受参数的时候,会重新开辟内存来进行计算。

 

二、指针

最牛逼:汇编语言:都是直接操作地址去访问内存单元里面等内容。

C语言作为高级语言:提供通过地言:都是址去访问内存单元的内容。

1、什么叫做地址?

 

地址就是内存中对每一个字节的编号。

通常一个数据的地址指的是存放这个数据的地址段的首地址。

 

注意:1、一个程序在运行是会自动为变量开辟新的内存,地址会变。

2、在同一次运行过程中变量的地址是不会变的。

3、数据段,一个程序是在一个数据段中进行的。

 

&(取地址运算符):单目运算符,返回一个变量的地址

*(指针运算符):单目运算符,返回的是一个地址里面的变量的数据。

&*具有相同的优先级,自右向左结合。

 

2、什么是指针?

指针就是地址,地址就是指针。

3、什么是指针变量?

存放地址的变量。

1、指针变量的声明: 数据类型 *变量名;  int *p;

2、指针变量的赋值:

A、在声明指针的时候赋值:int *p=&a;

B、先声明,再赋值。 Int *p;  p=&a;

C、不允许把一个数赋值给指针变量:int *p;   p=50000;(错误的)

3、指针变量的引用:

*变量名;Int *p;  p=&a;   *p=a;

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int a, b;
 6     int *p; //声明一个指针变量
 7 
 8     a = 20;
 9     b = 25;
10     p = &a; //把变量啊的地址赋予p   10000
11 
12     printf("变量a的值为:%d\n", a);
13     printf("变量b的值为:%d\n", b);
14     printf("变量a的地址为:%d\n", &a);
15     printf("变量b的地址为:%d\n", &b);
16     printf("指针变量p的值为:%d\n", p);
17     printf("指针变量p指向的变量的值为:%d\n", *p);
18 
19     return 0;
20 }

 

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int a, b;
 6     int temp;
 7 
 8     a = 6;
 9     b = 3;
10 
11     temp = a;
12     a = b;
13     b = temp;
14 
15     printf("a=%d\nb=%d\n", a, b);
16 }

 1 #include <stdio.h>
 2 
 3 void Swap(int a1, int b1);
 4 
 5 int main()
 6 {
 7     int a, b;
 8     a = 6;
 9     b = 3;
10 
11     Swap(a, b);
12     printf("a=%d\nb=%d\n", a, b);
13 }
14 
15 void Swap(int a1, int b1)
16 {
17     int temp;
18     temp = a1;
19     a1 = b1;
20     b1 = temp;
21 }

 

 

 

 1 #include <stdio.h>
 2 
 3 void Swap(int *pa1, int pb1);
 4 
 5 int main()
 6 {
 7     int a, b;
 8     int *pa,*pb;
 9 
10     a = 6;
11     b = 3;
12      
13     pa = &a;
14     pb = &b;
15 
16     Swap(pa, pb);
17     printf("a=%d\nb=%d\n", a, b);
18 
19 }
20 
21 void Swap(int *pa1, int *pb1)
22 {
23     int temp;
24     temp = *pa1;   //  
25     *pa1 = *pb1;
26     *pb1 = temp;
27 }

 

 

 

 

 1 //  x=x+y   y=x-y
 2 #include <stdio.h>
 3 
 4 void Calc(int *pa1, int*pb1);
 5 
 6 int main()
 7 {
 8     int a = 6,b = 3;
 9     int *pa = &a, *pb = &b;
10 
11     Calc(pa,pb);
12     printf("a=%d\nb=%d\n", a, b);
13 }
14 
15 
16 void Calc(int *pa1, int*pb1)
17 {
18     int temp;
19     temp = *pa1;
20     *pa1 = *pa1 + *pb1;
21     *pb1 = temp - *pb1;
22 }

最后一个:int a  float b  double c  运算  加减乘除 a+b  c+c  a-b  b*c  a/b

 

指针变量的运算:

(1)指针变量只可以做加减,不能做乘除,可以做关系运算

(2)加减法时,以指针指向的变量存储字节为单位。

Int a     int *pp=&a2000  p+1=2004    4

Short    p+1  2002     2

Char     p+1  2001    1

 

Pa  pb  pc  ----->  a

 

*pa --->a  

*pb 的值实际上就是a的值  *pb也会变化。

 

转载于:https://www.cnblogs.com/tiantiancode/p/11131750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值