C 语言 指针简介

本文深入解析C语言中的指针概念,阐述其在变量地址、动态内存分配、字符串操作及数组应用中的关键作用。文章强调了掌握指针对于提高编程效率的重要性,并通过实例演示如何定义、赋值和操作指针变量。

C 语言 指针简介

指针是 C 语言中一个重要的概念,是 C 语言中一个重要特色,也是 C 语言的精髓、灵魂所在。正确而灵活的运用它,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组。掌握指针的应用,可以使程序简洁、紧凑和高效。

大约 40% 的选择题与指针有关。对指针的掌握程度可以反映编程能力。

大纲分析

  1. 变量的地址和指针
  2. 指针变量的定义和指针变量的基类型
  3. 给指针变量赋值
  4. 对指针变量的操作
  5. 函数之间地址值的传递

地址

可以通过变量名访问内存。

内存的最小索引单元是字节(Byte)。可以把内存想象成一个超大的字符数组。我们知道,数组是通过下标来访问的,那么访问内存是否有类似的呢?

一个地址可以存放一个字节的数据。

地址 存放的值
……
10000 ‘I’
10001 ‘L’
10002 ‘O’
10003 ‘V’
10004 ‘E’
10005 520
10006
10007
10008
10009 ‘U’
……

变量名方便程序员。变量名对应着地址。

指针和指针变量。指针是地址的意思,C 语言里面有专门的指针变量用于存放指针。

指针变量占 4 个字节。

定义指针变量

类型名 *指针变量名

char *pa;    // 定义一个指向字符型的指针变量
int *pb;    // 定义一个指向整型的指针变量

我们使用 * 符号把 pa 和 pb 声明为指针。

取地址运算符和取值运算符

如果需要获取某个变量的地址,可以使用取地址运算符(&):

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

如果需要访问指针变量指向的数据,可以使用取值运算符(*):

printf("%c, %d\n", *pa, *pb);

直接通过变量来访问变量的值叫做直接访问,比如说 a = 3 ,通过 *pa = 3 称为间接访问。取值运算符也称为间接运算符。

#include <stdio.h>
int main() {
	char a = 'G';
	int b = 123;
	
	char *pa = &a;
	int *pb = &b;

	printf("a = %c\n", *pa);
	printf("b = %d\n", *pb);
// 通过指针间接访问
	*pa = 'F';
	*pb += 1;

	printf("now a = %c\n", *pa);
	printf("now b = %d\n", *pb);
// 指针变量所占字节
	printf("sizeof a = %d\n", sizeof(pa));
	printf("sizeof b = %d\n", sizeof(pb));
// 地址
	printf("the address of a is %p\n", pa);
	printf("the address of b is %p\n", pb);

	return 0;
}

运行结果:
a = G
b = 123
now a = F
now b = 124
sizeof a = 4
sizeof b = 4
the address of a is 0118FA57
the address of b is 0118FA48

避免访问未初始化的指针

例如:

#include <stdio.h>
int main() {
    int *a;
    *a = 123;
    return 0;
}

定义了一个整形指针却没有初始化。a 却实是一个指针,可是我们不知道它指向哪里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值