栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 指针

文章目录
  • 前言
  • 一、指针是什么?
  • 二、声明一个指针
    • 1.声明
    • 2.指针的使用
    • 3.为什么要使用指针


前言

C语言是最接近计算机底层的高级语言之一,它能够直接操作内存,C语言的指针为程序员提供了更多的操作,但也有陷阱


一、指针是什么?

指针就是内存地址!,指针变量就是存放这个内存地址的变量!

二、声明一个指针 1.声明

代码如下:

type* pointer_name;

type是类型名称,比如int,char,float…等等
pointer_name是指针变量的名字,和普通变量一样也是要取名的

2.指针的使用

开头已经讲到,指针是存储内存地址的。
你或许使用过scanf函数
假定有以下代码

#include 
#include 
int main() {
	int a;
	scanf("%d", &a);
	printf("a:%d", a);
	return 0;
}

很简单的一段代码,输入一个数,打印这个数。
scanf函数里面为什么是&a而不是a?那是因为函数传普通变量是会被拷贝的,必须用它的地址才能够完成赋值,我另一篇文章有讲。
那么,我们打印&a,会出现什么呢?
代码如下:

#include 
#include 
int main() {
	int a;
	printf("%p", &a);
	return 0;
}

%p格式打印一串地址
输出结果

000000310691FB44

注意,内存是随机分配的,打印结果是不一样的,但是这么长就对了。
我们已经可以打印&a了
我们可以用指针变量保存&a

#include 
#include 
int main() {
	int a;
	int* p = &a;
	printf("%prn",&a);
	printf("%p", p);
	return 0;
}

p是一个指针变量,它是int*类型,xxx*类型就代表是xxx类型的指针
比如这里是int*。
我们可以对一段地址进行取值操作

#include 
#include 
int main() {
	int a = 20;
	printf("%drn", *(&a));
	return 0;
}

输出结果:20
&a是a的地址,*可以取该地址的值,为20
同样,取出这个值是可以更改的

#include 
#include 
int main() {
	int a = 20;
	*(&a) = 100;// 等价于 a = 100
	printf("%drn", a);
	return 0;
}

输出结果:100
刚刚我们可以使用指针保存变量a的内存地址,通过上面这个例子,我们也可以使用指针更改变量a的数值。

#include 
#include 
int main() {
	int a = 20;
	int* p = &a;
	*p = 200;
	printf("%drn", a);
	return 0;
}

输出结果:200

3.为什么要使用指针
#include 
#include 
void addOne(int value) {
	value++;
}
int main() {
	int a = 20;
	addOne(a);
	printf("%d", a);
	return 0;
}

addOne函数是无效的,打印结果仍然为20。因为变量进入函数总是进行拷贝,但是我们可以传入指针更改指向内存所存储的值达到效果。

#include 
#include 
void addOne(int* value) {
	(*value)++;
}
int main() {
	int a = 20;
	addOne(&a);
	printf("%d", a);
	return 0;
}

打印结果:21

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号