C语言:用指针变量访问变量

一、指针和指针变量的概念

1. 指针和指针变量的概念

1.1 指针的概念

计算机要访问一个对象(变量、数组等),必须知道对象的地址和对象的类型。地址用来确定对象在内存中的位置,类型用来确定对象占用的字节数以及数据的存储方式,两者缺一不可。

能引导计算机访问对象的,称为指针。

1.2 指针变量

C语言中,有一种变量专门用来存放地址,如:int *p; 。由于定义中已经写明了数据类型,如果p再存放一个变量的地址,则它就具备了指针的两个属性------地址和类型,因此,这种存地址的变量就是指针变量。

1.3 指针跟指针变量的区别

指针变量具有指针的两个属性,因此指针变量是指针,但指针绝不仅限于指针变量,它还包括非对象形式的指针。例如,对于整型变量a,&a就是一个指针,但它不是变量,它是指针常量。

2. 直接寻址和间接寻址

在程序执行时,会给变量分配空间,计算机会把变量的地址、类型记录下来,以便以后去存取它。

2.1 直接寻址
cpp 复制代码
a = 5;
b = a;

上面两个语句中都用到了变量a,前者是向a中存数据,后者是从a中取数据。类似的,之前我们使用变量的方式,全都是直接寻址。

2.2 间接寻址

若变量a的地址已经存放在另一个变量(比如p)中,则可以先找到p,从p中取得变量a的地址,然后通过访问a的地址找到a。

cpp 复制代码
*p = 5;
b = *p

二、通过指针变量访问变量

1. 指针变量的定义

cpp 复制代码
int *p1;    //定义一个指针变量,用来存整型变量的地址
float *p2,*p3;    //定义两个指针变量,都可以存float变量的地址
char c1,*p4,c2;    //定义两个字符变量和一个指针变量p4,p4用来存字符变量的地址

2. 指针变量的赋值

cpp 复制代码
int a,*p;
p = &a;    //指针变量的赋值
cpp 复制代码
int a,*p = &a;

第一种写法是给p赋值,第二种写法是给p赋初值。

三、指针变量在函数传递中的作用

cpp 复制代码
#include<stdio>
void func(int n)
{
    n=60;
}
int main()
{
    int score=59;
    func(score);
    printf("%d\n",score);
    return 0;
}

因为形参不能改变实参的值,所以运行结果还是59。

既然直接访问不行,那就用间接访问的方式来操作score。方法是把变量score的地址当作实参,传递给func()函数,fun()函数有了这个地址,就可以找到score并把60存进去了。

cpp 复制代码
#include<stdio>
void func(int *p)
{
    *p=60;
}
int main()
{
    int score=59;
    func(&score);
    printf("%d\n",score);
    rteurn 0;
}

这时候程序运行结果就是60。

相关推荐
泡泡鱼(敲代码中)1 天前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
Logic1011 天前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
Navigator_Z1 天前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
是隼人1 天前
buuctf-pwn picoctf_2018_shellcode(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
潜创微科技1 天前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
Escalating_xu1 天前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊1 天前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
cvby1 天前
C++11
开发语言·c++
白色的北极熊1 天前
字符转 ASCII 码
c语言
ch.ju1 天前
Java—idea知识:如何创建新项目
java·开发语言·intellij-idea