[C] 指针

一、指针的重要性: 指针是 C 语言的灵魂

二、定义

1、地址:内存单元的编号,从0开始的非负整数

CPU 可以直接访问内存,不能访问硬盘!
CPU 和内存之间三根线: 地址线,控制线,数据线
(1)通过地址线确定CPU对哪个内存(内存的哪个编号区域)进行处理
(2)控制线确定是对其进行 读 or 写 or 只读 or 只写
(3)数据线来确定数据传输问题

注意: 内存的范围编号是 0~4G—1, 内存编号不可重复,但不同编号的内容可重复(内存范围:0~FFFFFFFF)

2、指针:指针就是地址!
指针变量是存放内存单元地址(内存单元编号)的变量
指针本质是一个操作受限的非负整数(不能进行加减乘除,只能在某些情况下进行相减)

三、分类

1、基本类型的指针

int * p;  
// P 是个变量名字, int * 表示该 p 变量只能存储 int 类型变量的地址

int * p;
int i = 10int j;
p =& i;  (对)
// 在这   表示 p 保存了 int 类型变量 i 的地址
// 如果没有这句, p会自然存在一个复杂数字(不确定变量)
p =10;(错)
// p只能存放地址,不能直接存放数据
j = * p ;           // 等价于 j = i

1/ 把 i 的地址发送给 p, 意味着 p 指向 i
2/ *p 就是 i 变量, 不是 i 的地址,不是 i 的值,就代表 i 本身
3/ 修改 i 或 p 的值,不会影响另一个的值

注意: 1. 常量和表达式前不能加&

四、 如何通过被调函数修改主调函数中普通变量的值

1、 实参为相关变量的地址
2、 形参为以该变量的类型为类型的指针变量
3、在被调参数中通过 *形参变量名的方式修改主函数


# include <stdio.h>
void f(int * p)     //不是定义了一个形参,而是定义了一个形参,名字叫做p,它的类型 是int * 
{
    
    
*p=100;
}
int main(void)
{
    
    
int i=4;      //用栈的方式存储,是“压”到堆栈里面的
f(&i);         //(实参为i的地址) p=&i; p指向i 
printf("%d\n", i);        //i=100 
}

 void f(int i)
{
    
    
i=100;  
}
int main(void)
{
    
    
int i=4;   //这个i是用栈的形式存储的
f(i);  
printf("%d\n", i);      //  i=4 
}

おすすめ

転載: blog.csdn.net/Jingle_dog/article/details/107722504