指针的直接访问和间接访问:
直接访问:
直接通过定义的变量来获取变量的数值
访问:
通过指针的形式,指向原来变量存储的值,同样也可以进行修改
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[]){
//定义一个整形变量
int a = 10;
//定义一个整形指针,指向变量a
int *int_pointer_1 = &a;
//定义一个字符变量
char b = 'c';
char *char_pointer_2 = &b;
//直接访问形式,就是直接通过原来的变量名来进行访问
printf("a = %d b = %c\n",a,b);
//间接的访问形式,就是间接通过指针指向的变量,来间接的访问原来变量的,此处的*为指向的意思
printf("a = %d b = %c\n",*int_pointer_1,*char_pointer_2);
//直接访问形式
a = 50;
b = 's';
printf("a = %d b = %c\n",a,b);
//间接的访问形式,注意:*在除了指针初始化是指针运算符,在其他的时候为指向的意思
*int_pointer_1 = 100;
*char_pointer_2 = 'b';
printf("a = %d b = %c\n",*int_pointer_1,*char_pointer_2);
printf("int_pointer_1 address = %p char_pointer_2 address = %p\n",int_pointer_1,char_pointer_2);
return 0;
}
输出的结果为:
a = 10 b = c
a = 10 b = c
a = 50 b = s
a = 100 b = b
int_pointer_1 address = 0x7ffd56b00fdc char_pointer_2 address = 0x7ffd56b00fdb
通过直接和间接的形式都去获取或者修改原来变量的值;
指针的初始化:
int a = 10;
int *pointer = &a;//定义并且初始化
或者://定义过后,然后再进行初始化
int a = 10;
int *pointer =NULL;
pointer = &a;
NULL为空,值为0,赋值为NULL的指针为空指针,它不指向任何变量,
指针定义后不进行初始化会产生”野指针”,它指向一个不确定的区域,也指针的地址是一个随机的值,
注意:指针变量是专门用来存放地址的,不能将其他任何非地址类型的数据赋予一个指针变量,一个指针只能指向同一个类型的变量
%p 地址输出格式符
注意一下用法:
int p = (int )0x12345678;
此处p中存储的地址有可能是一个具体的地址,同时也有可能是一个不存在的地址,因为地址是按字节来分的,没一个地址之间间隔着一个具体 数据类型的字节大小,,因此这种用法是不推荐去使用的,出错的概率相当大。