学习笔记5-C语言指针
来源:互联网 发布:日本烘焙大师 知乎 编辑:程序博客网 时间:2024/05/22 03:03
一 指针
1 内存地址的概念
内存地址:内存中存储单元的编号.
变量地址:系统分配给内存单元的起始地址。
2 指针的概念
指向内存单元的地址。
3 指针的好处
1) 让函数有多个返回值。
2) 为函数提供修改和调用变量的灵活手段。
3) 可以改变某些子程序的效率。
4) 为动态数据结构(二叉树,链表)提供支持
4 变量的存取方式
a直接存取:通过变量名称赋值和取值
b间接存取:通过指针对变量赋值和取值。
5 指针变量概念
存储指针的变量
变量的值是一个地址。
6 指针变量定义和初始化
类型说明符 * 变量名;
charch=‘a’;
char*p = &ch;
注意
a 类型说明符是指针变量指向的变量的数据类型。
b *说明定义的变量是一个指针变量。
c指针变量有全局 和局部之分
d 不初始化的指针变量存储的值为随机数,这种指针称为野指针。
f 不知道指向的指针变量最好赋值为 null。
g 定义什么类型的指针就应该指向什么类型的变量
7 指针变量的引用
*p 取p地址存储的值。
8 指针应用场景
1) 在被调函数中修改主调函数的变量值。
2) 在函数中实现返回多个返回值,在传参数的时候将将要返回值的地址传入被调函数中。修改地址对应的值就可以实现多个返回值。
9 二级指针
指向指针的指针
10 数组指针
指向数组的指针
1)指针与一维数组
int a[3]={1,2,3};
int *p =a;
a为数组名 存储的是数组的首地址。
p+1:指向数组中下一个数据的地址
*p++ 指针偏移 先取p值 再加 *p++ 的值为*p的值
2)指针与二维数 组
int a[2][3]={1,2,3,4};
a 是数组首地址 也是第0行的首地址,也是第0行第0列的地址
a[0]+i 是第0行第i列的地址。
a+i表示第i行首地址
*(a+i)为第i行的首地址。
**(a+i) 为第i行第0列的值。
*(*(a+i)+j)为第i行j列的值。
11 一维指针数组
存储指针的数组。
int a=b=b=3;
int *p[3]={&a,&b,&c};
p为数组的首地址,也是第一个元素的存储地址。
使用数组名访问a的值
*p 为第一个元素的值也为a的地址
**p 为a的值。
12 二维数组指针
C 语言中可以通过定义行数组指针的方法,使得指针变量与二维数组名有相同的性质。
数据类型 (*指针变量名)[二维数组的列数];
int a[2][2]={1,2,3,4};
int (*p)[2]=a; 定义一个数组指针,指向含2个元素的一维数组。
二维数组中 a=&a[0]=&a[0][0]=a[0]
*(*(p+i)+j)获取二维数组的每个值。
指针数组和二维数组指针的区别
指针数组 int *p[2] ;多个指针
二维数组指针 int (*p)[2]; 一个指针变量
13 字符串指针
字符串定义 char str[10]=“abcdef”;
字符串指针定义 char *str;
str = “dasda“;取字符串的首地址赋值给str
str都为字符串的首地址。
14 char型指针数组
char 类型指针数组
1)定义
char *name[3]={
“xiaoming”, //值都是字符串的首地址
“xiaohong”,
“xiaohuang”
}
2)使用
指针法printf(”%s\n”,*(name + i));
下标法 printf(”%s\n”,name[i]); name[i]为指针数组的第i个元素的值,也为字符串的首地址。
3)字符串指针和字符数组的区别
字符串指针:char *str=“abc “;
abc保存在常量区 str为指针变量可以重新赋值(指向)
字符数组 :char str[]=“abc “;
abc保存在栈区 str为常量值为abc的首地址不能重新赋值。
15 fgets函数的使用
暂时使用fgets接收从键盘接收一个字符串,保存到数组中。
scanf不可以接收空格。
gets可以接收空格,越界访问警告
fgets 安全的字符串接收函数。保留一个位置存\0.
使用格式
fgets(字符数组名,长度 ,stdin);
int ch[10];
fgets(ch,sizeof(ch),stdin);
16 fputs函数的使用
fputs(地址,stdout); //不会自动换行 puts可以自动换行。都不能格式化输出
17 const关键字
const是类型修饰符。
修饰的变量值不能改变。静态常量。
- 学习笔记5-C语言指针
- c语言指针学习笔记
- C语言指针学习笔记
- C语言指针学习笔记
- C语言指针学习笔记
- c语言学习笔记--指针
- C语言学习笔记-指针
- C语言指针学习笔记
- C语言学习:指针(笔记)
- C语言学习笔记-指针
- C语言指针学习笔记
- c语言学习笔记29之指针5
- C语言学习笔记——指针
- C语言学习笔记(12指针)
- C语言学习笔记(13指针)
- C语言学习笔记(14指针)
- C语言学习笔记(15指针)
- C语言学习笔记(16指针)
- mysql-5.6.27-winx64安装
- 第一个android 程序的学习心得
- 循环链表
- 南大软院大神养成计划之网页设计之路第二天
- 开始写自己的博客了
- 学习笔记5-C语言指针
- poj 1730 筛素数+因式分解(Perfect Pth Power)
- UVAlive 4119 (数学)
- 为什么不能用memcached存储Session
- No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
- HDU 5506:GT and set bitset+暴力
- 5.2 - Function Basics
- kali安装WingIDE遇到软件依赖性问题的处理
- iOS ViewController之间传值方法一(利用临时变量)