C语言的指针初步理解

最近在学C语言 折腾了几天 今天终于看到了指针这一章 也是几经折腾 稍微看懂了点


对变量的访问
一种是直接访问 通过变量名或地址直接访问变量
一种是间接访问 通过指针指向变量 获得变量地址 然后根据地址再去访问内存中存储的内容
注:NULL表示空指针 值为0

变量

变量:用来标识一块内存区域,这个区域存储的值是可以改变的
变量名:它不占用空间 他只是那个内存区域地址的一个标识 一个别名 就像每一个人都有一个名字 方便查找等 另外这个变量名是给程序员们来操作的 机器中是不会出现它的
地址:地址就是地址 声明变量所占的那个内存区域的地址位置

指针变量

用来存放一个变量的内存地址 他只能保存一个合法的地址
合法的地址包括:auto变量的地址;静态变量的地址;调用内存分配函数(如malloc)返回的地址
指针变量必须要先有指向 然后才能赋值 可以使用 & 符号获取变量的地址

指针变量的定义

类型说明符 *变量名

1
int *num;

指针变量的初始化和赋值
1
2
3
4
5
int a=100;
int *num = &a;
//或者
int *num;
num=&a;
示例
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
void main(){
int a=100;
int b;
int *num;
//*num=&a;
*num=233;
b=*num;
printf("b value is : %d",b);
}

这个是我一开始写的 会报错 因为 *num=233; 这里的 num 只是声明了一下他是指针变量 他并没有任何的指向 这种情况下直接给他去赋值 是不能赋值的 这种指针叫 悬浮指针。所以指针需要先有指向就是说到底是哪块内存。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
void main(){
int a=100;
int b;
//int *p=&a;
int *num;
num=&a;
*num=233;
b=*num;
printf("b value is : %d",b);
}

首先声明了一个int类型变量 a 初始化赋值100,声明了一个int变量 b,然后又声明一个指针变量 num.
num=&a; 表示先把指针变量 num 指向了变量 a 的地址
*num=233; 表示给指针变量赋值 233 也就是指针变量所指向地址的值赋值了 233 以为变量 a也是指向这个地址 所以此时 a的值也已经变为了233
③最后把 num 所指向的值 233 赋值给了 b 所以此时b的值是 233

先简单写到这里
关于字符串类型和指针还有点迷惑待整理~


-------------The End-------------