c语言指针操作
2016-07-27 21:22
246 查看
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
type *var-name;
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
NULL 指针是一个定义在标准库中的值为零的常量
可以对指针进行四种算术运算:++、--、+、-。
假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:
ptr++
在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节(一个整型变量占用4字节)。
如果 ptr 指向一个地址为 1000 的字符(char占用1个字节),上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。
指针数组:让数组存储指向 int 或 char 或其他数据类型的指针
指针的指针:
指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置
type *var-name;
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
NULL 指针是一个定义在标准库中的值为零的常量
可以对指针进行四种算术运算:++、--、+、-。
假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:
ptr++
在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节(一个整型变量占用4字节)。
如果 ptr 指向一个地址为 1000 的字符(char占用1个字节),上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。
#include <stdio.h> int main(){ int age=20;//实际变量 int *p_age;//指针变量声明 p_age=&age; printf("变量age的内存地址:%x\n",&age); printf("p_age存储的地址:%x\n",p_age); printf("指针p_age的值:%d\n",*p_age); return 0; }
变量age的内存地址:18ff44 p_age存储的地址:18ff44 指针p_age的值:20
指针数组:让数组存储指向 int 或 char 或其他数据类型的指针
#include <stdio.h> const int MAX=3; int main(){ int age[]={1,5,20}; int i,*p_age[MAX]; for(i=0;i<MAX;i++){ p_age[i]=&age[i]; } for(i=0;i<MAX;i++){ printf("age[%d]的值:%d\n",i,*p_age[i]); } return 0; }
age[0]的值:1 age[1]的值:5 age[2]的值:20
指针的指针:
指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置
#include <stdio.h> int main(){ int age; int *p_age; int **pp_age; age=100; p_age=&age;//获取age的地址 pp_age=&p_age;//使用&获取p_age的地址 printf("age的值:%d\n",age); printf("指针*p_age的值:%d\n",*p_age); printf("指针**pp_age的值:%d\n",**pp_age); }
age的值:100 指针*p_age的值:100 指针**pp_age的值:100
相关文章推荐
- Leetcode 73. Set Matrix Zeroes (Medium) (cpp)
- c++重载、覆盖、隐藏
- 由static_cast和dynamic_cast到C++对象占用内存的分析
- stack应用--矩阵乘法次数计算
- 用Mac终端编写,编译C程序的实例
- [kuangbin带你飞]专题十四 数论基础-C - Aladdin and the Flying Carpet
- 简单点,switch-case的结构简单点~ C语言学习(4)
- c++内联函数(inline)使用详解
- Leetcode 229. Majority Element II (Medium) (cpp)
- Flatten Binary Tree to Linked List
- C ++ 虚函数 (转)
- C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
- c++实现图像旋转任意角度
- 趣味100道C语言程序题num six
- c++设计模式之模板模式
- 设计模式之观察者设计模式(C++实现)
- C语言学习
- errno、stderr、perror函数和strerror函数
- c++ 初始化列表
- 如何在VS2013中打印内存泄露信息