C语言学习—指针
2015-10-17 00:00
483 查看
摘要: 指针基础知识点
1. 指针变量定义与使用
指针变量
定义:存放内存地址的变量
指针类型转换符%p
2. 取址运算符&
3. 取值运算符*
*和&是配套的操作符
4. 指针的算术运算
只有加、减运算:
注意:指针类型决定移动字节数
注意事项:*p 指针变量定义时,只起修饰作用,告诉编译器p是指针
指针变量取值时,访问内存地址为p的存储区域
5. 指针与数组
数组
数组:⽤用连续内存空间存储数据的构造类型。
数组名: 数组元素⾸首地址
例如:int array[3] = {1, 3, 8}; // array 恒等于 &array[0]
指针与数组
指针可以当数组名使用
p[1] = 3;
恒等于a[1]
恒等于*(p+1)
恒等于*(a+1)
指针与数组的区别
所占空间不同
-指针:只与操作系统位数有关
-数组:与元素个数和类型有关
数组名是常量地址,不能重指向(不能赋 值)
指针可以重指向
6. 指针与字符串
字符指针可以操作单个字符,也可以操作字符串
例如:
指针数组
存放指针的数组称为指针数组。
例如
7. 指针与函数
指针作为参数
8. 结构体指针
定义:指向结构体变量的指针,称为结构体指针
结构体指针访问成员
指针p是第一个成员变量的首地址
9. 结构体数组与指针
结构体数组的数组名是一个结构体指针常量。
10. 结构体指针为函数参数
函数声明:
void printStudents(Stu *pstu, int count);
函数操作结构体数组时,需要传入首地址和元素个数。
1. 指针变量定义与使用
指针变量
定义:存放内存地址的变量
//变量类型:整型指针 = 初始值:NULL恒等于0 int *p = NULL; //指针变量所占字节数只与操作系统有关
指针类型转换符%p
printf("p = %p\n", p);
2. 取址运算符&
int a = 3; int *p = &a; printf("&a = %p\n", &a); printf("p = %p\n", p);
3. 取值运算符*
int a = 3, b = 5; int *p = &a; printf("%d\n", *p); p = &b; *p = 100; printf("%d\n", b);
*和&是配套的操作符
4. 指针的算术运算
只有加、减运算:
int *p = &a; p ++;//向高位移动四个字节 p --;//向低位移动四个字节
注意:指针类型决定移动字节数
注意事项:*p 指针变量定义时,只起修饰作用,告诉编译器p是指针
指针变量取值时,访问内存地址为p的存储区域
5. 指针与数组
数组
数组:⽤用连续内存空间存储数据的构造类型。
数组名: 数组元素⾸首地址
例如:int array[3] = {1, 3, 8}; // array 恒等于 &array[0]
指针与数组
指针可以当数组名使用
p[1] = 3;
恒等于a[1]
恒等于*(p+1)
恒等于*(a+1)
指针与数组的区别
所占空间不同
-指针:只与操作系统位数有关
-数组:与元素个数和类型有关
数组名是常量地址,不能重指向(不能赋 值)
指针可以重指向
6. 指针与字符串
字符指针可以操作单个字符,也可以操作字符串
例如:
char string[] = “iPhone”; //string为数组名 char *p = string;//指向字符数组⾸首地址 *(p + 1) = ‘v’;//操作单个字符 printf(“%s”,p + 1);//操作整个字符串
指针数组
存放指针的数组称为指针数组。
例如
char *strings[3] = { “iOS”, “Android”, “Win8”};
7. 指针与函数
指针作为参数
8. 结构体指针
定义:指向结构体变量的指针,称为结构体指针
typedef struct student stu; stu stu1 = {0}; stu *p = &stu1; //stu * :结构体指针类型(类型) //p :结构体指针变量(变量名) //&stu1 :结构体变量地址(初值)
结构体指针访问成员
成员变量 | 值 |
num | 1 |
name | "iPhone" |
sex | 'm' |
score | 96.8f |
9. 结构体数组与指针
结构体数组的数组名是一个结构体指针常量。
Stu stu[3] = {0}; Stu *p = stu; //p为结构体指针变量,stu为数组名 //同 int array[3] = {0};int *p = array; (p + i) -> num ; 使用指针p访问下标为i的元素的成员变量num
10. 结构体指针为函数参数
函数声明:
void printStudents(Stu *pstu, int count);
函数操作结构体数组时,需要传入首地址和元素个数。
相关文章推荐
- 使用对象来管理资源
- iOS开发之C语言第二天
- 【C语言】顺序表,数组
- 编译DirextShowSDK时,BaseClasses\ctlutil.h(278) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
- C++虚基类的作用
- 初学C语言----循环作业题
- 利用arc4random_uniform()产生随机数
- [c++] CONST
- C++11 in Qt5
- C语言的运算符的优先级与结合性+ASCII表
- C语言的运算符的优先级与结合性+ASCII表
- 【面试题】C语言:实现一个函数,判断一个数是不是素数。
- C语言中的变量&命名规范
- C语言:实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置
- C语言--求两个数的最大公约数
- C语言中的数据类型&常量
- Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚
- C语言:实现一个函数判断year是不是闰年
- 用C语言打印图形&C语言注释符
- Ubuntu 64 下第一个c语言程序