- 前言
- 一、指针是什么?
- 二、声明一个指针
- 1.声明
- 2.指针的使用
- 3.为什么要使用指针
前言
C语言是最接近计算机底层的高级语言之一,它能够直接操作内存,C语言的指针为程序员提供了更多的操作,但也有陷阱
一、指针是什么?
指针就是内存地址!,指针变量就是存放这个内存地址的变量!
二、声明一个指针 1.声明代码如下:
type* pointer_name;
type是类型名称,比如int,char,float…等等
pointer_name是指针变量的名字,和普通变量一样也是要取名的
开头已经讲到,指针是存储内存地址的。
你或许使用过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



