C语言指针

本文详细介绍了C语言中的指针概念,包括指针变量的定义、初始化、赋值方法及空指针的使用。通过实例讲解如何正确地使用指针进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:

一、心理因素很重要。一定不要觉得指针很难,这会影响到你对它的理解,它并不难,它特别简单,就想吃饭一样(自我催眠一波 走起~)。

二、将 int * p; 把 int* 看作一个整体,当作一个新的数据类型,整型指针类型,根据 类型名的改变而改变。

一、变量的地址和指针

1、变量及其地址

  • 在C程序中要定义许多变量,用来保存程序中用到的暑假,包括输入的原始数据,加工的中间结果及最终数据。C编译系统会根据定义中变量的类型,为其分配一定字节数的内存空间(如字符型占1个字节,整型占4个字节,实型占4个字节,双精度型占8字节等),此后这个变量的地址也就确定了。

  • C语言规定,当一个变量占用一个字节时,该字节的地址就是该变量的地址,如果变量占用连续的多个字节,那么第一个字节的地址就是该变量的地址。

  • 变量的地址起到了寻找变量的作用,好像是一个指针指向了变量,所以常把变量的地址称为“指针”。

2、指针变量概念(很重要)

若一个 变量 专用于 存放另一个变量的地址(指针),则该变量称为指针变量。(将指针的概念搞清楚之后,对于后续指针相关操作会更容易)

3、指针对象

当把  变量的地址  存入  指针变量  后,我们就可以说这个指针指向了该变量 。

在C程序中,变量的地址可以  通过运算符 “&”   来得到,该运算符称为 “取地址符” 运算符,它的运算对象是  变量  或  数组元素,得到的  结果  是变量或数组元素的  地址 。

int a,b[10];

&a; // 得到的a的地址
&b[5]; // 得到的是数组元素 b[5]元素 的地址

二、指针变量的定义和指针变量的基类型

1、指针变量的定义和初始化

  • 定义指针变量的一般形式为:

  • 类型名 * 指针变量名1,* 指针变量名2,...;

  • 其功能是定义指向给定 "数据类型"的变量或数组元素的指针变量,同时给该变量赋 "初始值"。存储类型指出该变量的存储类型。

int *pa,*pb;
int a = 10,b = 12;

pa = &a // pa 取 a 的地址 的值,初始化
pb = &b // pb 取 b 的地址 的值,初始化

  • 定义时也可以给其赋初始值,格式为:

  • 类型名 * 指针变量名[=初始值];

  • 例如: int * pi, * pi = &a;

int a = 10;
float b = 1.2;

int * pa = &a;
float * pb = &b;

三、给指针变量赋值

1、给指针变量赋地址值(方式有三种)

  • (1) 通过求地址运算(&)获得地址值

  • 一般格式为:指针变量名 = 地址表达式

  • 例如:int k , * p , * q ; q = &k; ( "&" 为求地址运算符 )

  • 此时,变量k的地址赋予了q,也可以说p指向了k。

#include<stdio.h>

main()
{
    int k = 10;
    int * q;
    q = &k;
    
    printf("%d",*q); // 结果为 10, * 的作用是取该地址的值
}

  • (2)通过指针变量获得地址值

  • 可以通过赋值运算,把一个指针变量中的地址值赋给另一个指针变量,从而使这两个指针变量同一地址。例如,若有以上定义,则语句:

  • p = q

  • 使指针变量p中也存放了变量k的地址,也就是说指针变量 p 和 q 都指向了变量k。

  • 注意:在赋值号两边指针变量的基类型必须相同。(都要是int * 类型的)

#include<stdio.h>
#include<stdlib.h>

main()
{
    int k = 10;
    int * q;
    int * p;

    q = &k;
    p = q; // 将q的值赋值给p,p == &k

    printf("p = %d",*p); // p 等于 10
    // 暂定...   需要额外导入 第二个头文件
    system("pause");
}

(3)通过标准函数获得地址值 --- 不熟悉,不常用(可能吧)

2、给指针变量赋"空"值

  • 除了给指针变量赋值地址值外,还可以给指针变量赋NULL值(一定要大写)。
  • 例如:p = NULL;
  • NULL 是stdio.h 头文件中的预定义符。NULL的代码值为0,当p = NULL 时,称p为空指针。因为NULL的代码值为0,所以上面语句等价于:
  • p = '\0'; 或 p = 0;
  • 这时,指针p并不是指向地址为0的存储单元,而是具有一个确定的值---“空”。企图通过一个空指针去访问一个存储单元时,将会得到一个出错信息。
#include<stdio.h>
main()
{
    int a = 10;
    int * p;
    p = NULL;
    
    *p = 10; // 报错

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值