您的位置:首页 > 编程语言 > C语言/C++

C语言学习—指针

2015-10-17 00:00 483 查看
摘要: 指针基础知识点

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 :结构体变量地址(初值)

结构体指针访问成员

成员变量
num1
name "iPhone"
sex'm'
score96.8f
指针p是第一个成员变量的首地址

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);

函数操作结构体数组时,需要传入首地址和元素个数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C指针基础