C语言指针
OrangeThinK 2019年10月17日 •  0
本文最后修改于 755 天前,部分内容可能已经过时!

若有一个变量专门用来存放另一个变量的地址,那么就称它为“指针变量”。也就是说,指针变量里面存放的是指针,即地址
大家一定要区分“指针”和“指针变量”这两个概念。指针是一个地址,而指针变量是存放地址的变量。

习惯上我们也将“指针变量”简称为“指针”,但大家心里一定要明白这两个指针的区别。一个是真正的指针,它的本质是地址;而另一个是指针变量的简称。

变量名只是一个便于记忆识别的名称,编译器会将他编译成相应的内存地址的.(也就是说变量名只存在于我们的代码中,内存中指存在与之对应的内存地址)
[类型]* 指针名=你要指向的变量名

指针应用场景
函数返回多个值,某些值就只能通过指针返回(传入的参数实质需要返回数值)
函数返回运算的状态,指针返回结果(-1或0)

首先,变量自身的地址空间,其次,这个地址空间里面存放的内容
首先,指针变量也是一种变量,其次,它里面存放的是普通变量的地址,也可以称之为二次映射,它本身只存放其他普通变量的地址
那么既然存放的是别的普通变量的地址,那么就会涉及
读取自身地址、
读取存放内容(也叫做读取别的普通变量的地址)、
读取存放内容(别的普通变量)所存放的内容、
更新写入存放内容(也就是对自身地址进行操作)、
以及对存放内容(别的普通变量)所存放的内容进行修改

我们首先要认识&这个符号,这个符号叫做取地址符,需要取自身地址的时候要带上
我们其次要认识*这个符号,这个符号叫做运算符,在指针变量相当于帮你多做一步取值的工作

普通变量:
[类型] a=[新内容]; 或先声明后赋值 [类型] a;a=[新内容];
在scanf中,我们需要手动往地址写内容scanf("%d",&a),因为使用单一的a是取值的意思;
取值,普通变量无符号,直接变量名即可

指针变量:
[类型] p=[新地址];或先声明后赋值 [类型] p;p=[新地址]
而地址如果是普通变量,则需要使用&符号进行取地址,然后赋值给指针变量;
p="abc"这种写法错误,因为指针变量只能存放地址类型,如果要改写具体内容,则需要在使用 声明后使用 *p="abc"
取值,指针变量和普通变量是一样的,同样是无符号,直接变量名即可
指针变量比普通变量多了个间接取值的作用,把运算符*带上,系统即会帮你取出存放地址后取存放地址所存放的内容出来

#include <stdio.h>
int main(){
    int a=1; //声明并赋值一个值为1的整数变量
    int * p=&a; //声明一个指针变量,并将a这个整数变量的地址作为值赋值给p
    printf("%x\n",&a); //输出a变量自身的地址
    printf("%x\n",p); //输出p的值,也就是a变量的地址,和 printf("%x\n",&a);作用一样
    printf("%x\n",&p); //输出p变量自身的地址
    printf("%d\n",a); //输出a变量的值
    printf("%d\n",*p); //输出p变量所指向的a变量的值,和printf("%d\n",a);作用一样
    *p=2; //更新p变量所指向的a变量的值
    
    return 0;
    
}
华为路由器中OSPF的一点小试验 打赏
请作者吃个鸡腿!
世界上最好的编程语言哈哈哈哈哈

该页面评论已关闭