C语言学习笔记4
来源:互联网 发布:零基础如何学好c语言 编辑:程序博客网 时间:2024/05/16 10:10
一级指针和多级指针
一级指针
指针的基本用法:
32位系统下指针是4个字节,64位系统下指针第8个字节
* 在配合数据类型定义变量的时候使用 * 号,是代表这个变量的类型是指针类型
int a; // 定义一个整型指针变量,并赋值10 int *p = &a; // 定义一个整型指针变量,指向 a 的地址
- 在配合变量进行操作的时候使用 * 号,是取值运算符,意思是可以去除这块内存空间的值
printf("%d\n", *p); // 取出 p 指向内存空间的值 printf("%d\n", *p += 1); // 取出p指向的内存空间的值,并自增1 printf("%d\n", a); // a的值也会被修改是11
指针的集中特殊定义方式:
指针常量
int *const p;
- p是 int* 类型,const 修饰的是p,所以p是向量
- 则 p 指向的地址不可修改也就是说不能再指向其他地方了
- 但是,可以修改他所指向的地址里的值。
举例:
int a = 10; int b = 20; int *const p = &a; p = &b; // 错误 *p = 100; // 允许
常量指针
const int *p; int const *p;
- p是 int* 类型,const 修饰的是 *p,所以 *p 是常量
- 则 p 是一个指向常量的指针,也就是说其可以指向其他地址
- 但是,其所指向的地址里的值不能修改
举例:
int a = 10; int b = 20; const int *p = &a; p = &b; // 允许 *p = 100; // 错误
常量指针常量
const int *const p;
- p 是 int* 类型,const 分别修饰了 p 和 *p,所以 p 和 *p 都是常量
- 则p是一个指向常量的指针常量
- 也就是说这个指针指向的地址不可修改,地址里的内容也不可修改
举例:
int a = 10; int b = 20; const int* const p = &a; p = &b; // 错误 *p = 100; // 错误
切记
* 如果你定义了一个指针,那么就一定要知道这个指针指向了什么地方,而且你要保证你定义的这个指针是正确而且有效的
* 如果你乱用,那么就会出现程序崩溃来惩罚你
* C语言之所以强大、自由、执行高效,很大部分是体现在指针的灵活运用上
多级指针
定义一个一级指针
int *p = NULL;
定义一个二级指针
int **pp = &p;
定义一个三级指针
int ***ppp = &p;
- 在 printf 打印的时候 %p 打印地址, %d 打印整数, %f 打印浮点数, %s 打印字符串,%c 打印字符
举例:
#include <stdio.h>int main(void){ int a = 10; // 定义一个整型变量 a,值为 10 int *p = &a; // 定义一个一级整型指针变量p,值为 a的地址 int **pp = &p; // 定义一个二级整型指针变量pp,值是 p的地址 int ***ppp = &pp; // 定义一个三级整型指针变量ppp,值是 pp 的地址 printf("%p, %p, %p, %p\n", &a, &p, &pp, &ppp); // 取出各个变量自身在内存的地址 printf("%p, %p, %p, %p\n", &a, p, pp, ppp); // 除了 &a之外,都是打印各个指针变量存储的值 printf("%p, %p, %p, %p\n", &a, p, *pp, **ppp); // %p打印地址(其实是按十六进制方式打印出) // 1. 利用取地址运算符&,打印变量 a 的地址 // 2. 直接打印p的值,也就是 a 的地址 // 3. 利用取值运算符*,取出二级指针变量pp的值,也就是一级指针p的地址,在通过%p打印出p的值,也就是 a 的地址 // 4. 利用取值运算符*,取出三级指针变量ppp的值,也就是二级指针pp的地址,再通过取值运算符*,取出二级指针pp的值 // 也就是p的地址,再通过%p打印出p的的值,也就是 a 的地址 printf("%d, %d, %d, %d\n", a, *p, **pp, ***ppp); // 如果要取出变量a的值,那么用了多少级指针,就用多少个取值运算符, // 在取出最后的值之前,各级指针取出的值都是其上一级指针的地址 return 0;}
0 0
- C语言学习笔记(4)
- C语言学习笔记4
- c语言学习笔记4
- C语言学习笔记4
- C语言学习笔记4
- C语言学习笔记4
- c语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C语言学习笔记
- C 语言学习笔记
- C语言学习笔记
- C语言学习笔记
- Android Studio2.3更换默认的ConstraintLayout布局
- Unity3d——GFootball_01:基础模型创建
- FP-growth算法
- Tensor数据相关的运算及函数讲解
- 嘟哝之JDK -- ArrayList
- C语言学习笔记4
- MySQL 错误一例 ERROR 1785 (HY000) @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1..
- string int
- 3Sum
- 【HDU 1426 Sudoku Killer】+ DFS
- [android]错误:Suggestion: use tools:overrideLibrary="" to force
- Ubuntu 16.04 笔记本无法连接Wifi上网
- 面向对象this关键字
- Unity5.x AssetBundle打包和加载深入分析