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

关于C语言中的指针

2016-05-09 10:50 316 查看
1、对于已定义的某个变量的读取:通过该变量来访问它的值;通过该变量的存储位置读取数值(指针)。操作系统会将所有的内存单元进行编号。

关于32位操作系统与64位操作系统支持的最大内存。计算机底层使用二进制进行管理,所以32位操作系统支持2的32次方个编号,即4G的内存地址。

int a=1;

int b=2;

若:对于数值1,其在内存上的编码地址为0x00010001;数值2的内存编码地址为0x00010003;a的内存编码地址为0x00010004;b为0x00010007。

则0x00010001  和0x00010003这个两个内存编号就是指针。

在编程中,通过变量a/b来获取变量值得读取方式称为“直接访问”;二程序通过内存编码地址先找到对应编码的内存单元,在从内存编码单元上读取数值的方式为“简介访问”。

变量的内存地址就是该变量的指针,而用于保存该内存地址的变量就是指针变量(即a和b)。

2、关于指针的使用

&:取地址运算符---后面紧跟变量,用以读取该变量所在的内存地址;

*:后面紧跟一个指针变量,用以读取该指针变量对应的变量

int a=200//定义一个int类型的变量

int*p;//定义一个指向int变量的指针

p=&a;//将a变量的内存地址赋值给p这个指针变量的值

NSlog(@"%d",*p);//*p表示取出指针p对应的变量,即200;

NSlog(@"%d",a==(*(&a)));//取出a的指针,然后将a的指针进行反向取出,得到200;

指针变量本身也是一种变量,只是其变量存放的值不同,只能用以存放其他变量的内存地址:

 定义指针变量时,必须使用*来标示定义的指针变量;

 C语言是强类型语言,使用指针变量之前必须对其进行声明。而且一旦声明了该指针变量的类型后,该指针变量就只能指向对应类型的变量。如int*p只能执行int类型数值的指针;double*q同理。

3.

void swap(int*p1,int*p2){

int tem=*p1;

*p1=*p2;

*p2=tem;

p1=p2=nil;

}

int main(int argc,char*argv[]){

@autoreleasepool{

int a=5;

int b=3;

int*p1=&a;

int*p2=&b;

swap(p1,p2);

}

}

关于该段代码运行的结果:a和b的数值进行了替换,但是p1和p2的数值并没有发生变化,所以说明在进行运算时只是将指针的副本进行了传递,并没有对指针本身进行传递和修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: