指针 笔记2
一、指针定义
指针的定义
int *p; // int *p1, *p2;
或者
int* p; // int* p1,p2; //p1 是指针, p2 只是整形变量
或者
int * p;
或者
int*p;//不建议
eg:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int age;
char ch;
//定义了一个指针
//指针本身也是一个变量
//名称是 p, 它是一个指针,可以指向一个整数
//也就是说: p 的值就是一个整数的地址!!!
int *p ;
char * c;
//指针 p 指向了 age
//p 的值,就是 age 的地址
p = &age;
c = &ch;
//scanf_s("%d", &age);
scanf_s("%d", p);
printf("age: %d\n", age);
system("pause");
return 0;
}
二、指针的初始化
#include <stdio.h>
#include <stdlib.h>
int main(void){
int room = 2;
//向 定义两个指针变量指向 room
int *p1 = &room;
int *p2 = &room;
printf("room 地址:0x%p\n", &room);
printf("p1 地址:0x%p\n", &p1);
printf("p2 地址:0x%p\n", &p2);
printf("room 所占字节:%d\n", sizeof(room));
printf("p1 所占字节:%d\n", sizeof(p1));
printf("p2 所占字节:%d\n", sizeof(p2));
system("pause");
return 0;
}
注意:
32 位系统中,int 整数占 4 个字节,指针同样占 4 个字节
64 位系统中,int 整数占 4 个字节,而指针占 8 个字节
三、指针的访问
#include <stdio.h>
#include <stdlib.h>
int main(void){
int room = 2 ;
int room1 = 3 ;//3p
int *p1 = &room;
int *p2 = p1;//int *p2 = &room;
//1.访问(读、写)指针变量本身的值,和其它普通变量的访问方式相同
int *p3 = p1;
printf("room 的地址: %d\n", &room);
printf("p1 的值: %d p2 的值: %d\n", p1, p2);
printf("p3 的值: %d\n", p3);
p3 = &room1;
printf("p3 的值: %d, room1 的地址:%d\n", p3, &room1);//不建议用这
种方式
//使用 16 进制打印,把地址值当成一个无符号数来处理
printf("p1=0x%p\n", p1);
printf("p1=0x%x\n", p1);
printf("p1=0x%X\n", p1);
system("pause");
return 0;
}
访问指针所指向的内容

#include <stdio.h>
#include <stdlib.h>
int main(void){
int room = 2 ;
int * girl = &room;
int x = 0;
x = *girl;// *是一个特殊的运算符,*girl 表示读取指针 girl 所指向的
变量的值, *girl 相当于 room
printf("x: %d\n", x);
*girl = 4; //相当于 room = 4
printf("room: %d, *girl: %d\n", room, *girl);
system("pause");
return 0;
}
四、空指针和坏指针
#include <stdio.h>
#include <stdlib.h>
int main(void){
int room1 = 666;
int room2 = 888;
int girl ;
int *select ;
scanf_s("%d", &girl);
if(girl == 666){
select = &room1;
}else if(girl == 888){
select = &room2;
}
printf("选择的房间是: %d\n", *select);
system("pause");
return 0;
}
1. 什么是空指针?
空指针,就是值为 0 的指针。( 任何程序数据都不会存储在地址为 0 的内存块中,它是被操作系
统预留的内存块。)
int *p = 0;
或者
int *p = NULL; //强烈推荐
2. 空指针的使用
1)指针初始化为空指针
int *select = NULL;
目的就是,避免访问非法数据。
2)指针不再使用时,可以设置为空指针
int *select = &xiao_long_lv;
//和小龙女约会
select = NULL;
3)表示这个指针还没有具体的指向,使用前进行合法性判断
int *p = NULL;
// 。。。。
if (p) { //p 等同于 p!=NULL
//指针不为空,对指针进行操作
}
3. 坏指针
int *select; //没有初始化
情形一
printf("选择的房间是: %d\n", *select);
情形二
select = 100;
printf("选择的房间是: %d\n", *select);

浙公网安备 33010602011771号