黑马程序员——C语言——指针
2015-12-08 18:12
537 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 什么是指针?
指针就是地址,对一个内存单元来说,单元的地址即为指针,其中存放的数据是单元的内容。
变量的存取方式有两种:a. 直接存取——通过变量名存取
b. 间接存取——通过地址(指针)存取
2. 指针变量——存放指针(地址)的变量
注意事项:1. 指针是一个地址,是常量
2. 指针变量存放地址,是一个变量
指针变量的定义:
类型名 *变量名; eg: int *p; //p是一个指针变量,存放int类型变量的地址
指针变量注意事项:
定义指针变量时,“*”必须有,没有就相当于定义一个普通变量
不能用指针变量存放数值或字符
指针变量也是变量,有全局和局部之分
3. 指针变量的初始化:
定义的同时初始化
eg: int a = 3;
int *p=&a; //指针变量p指向a
int *p1 = &a, *p2 = &a;
b. 先定义后初始化
eg: int *pointer;
pointer=NULL; //此种方式最好不用,会造成野指针
c. 定义一个变量但不指向
eg: int *pointer=NULL;
注意事项:a. 多个指针可以指向同一个地址
b. 指针可以改变指向
c. 指针如果没有初始化,里面存放的是垃圾值,称为野指针
4. 指针变量的引用
使用“*”获取指针变量对应的存储单元 eg: *p = 100; //指针变量p指向的变量被赋值100
value = *p; //引用指针变量给value赋值100
指针使用实例代码
二级指针:指针变量指向指针
数组指针:指向数组元素的指针
数组指针的作用:使用数组指针间接访问数组的元素
数组元素的初始化:
int a[2]={1,2};
int *p=&a; //p指向数组的第一个元素
数组指针和数组名的区别:
p是一个指针变量,它存放的值是可以改变的,*p++是可以的,而数组名是一个常量,不能进行自增或自减
使用指针把数组逆序的示例代码:
一维指针数组
指针数组:数组元素的值是指针
一维指针数组的定义
类型说明符 *数组名[数组长度] eg:int *p[3];
指针数组的使用举例:
int a=3, b=4, c=5;
int *p[3]={&a, &b, &c};
通过数组元素访问a的值如下:
printf("a=%d\n",*p[0]);
通过数组名访问a的值如下:
printf("a=%d\n",**p);
二维数组指针的定义
数据类型 (*指针变量名)[二维数组的列数]
eg: int (*p1)[4];
二维数组指针的初始化
int a[2][3]={0,1,2,3,4,5};
int (*p)[3]=a;//定义一个指向数组a的行指针
二维数组指针的引用——*(*(p+i)+j) //获取二维数组的每一个元素
一维指针数组和二维数组指针的区别:指针数组表示的是多个指针,二维数组指针变量是一个单个变量
字符串指针——指向字符串
定义格式:char *变量名="字符串内容"; //字符串指针指向字符串
char *p1= &ch; //字符指针
根据赋值的类别来区分是字符指针还是字符串指针。
char *str="abc";把字符串常量的首地址(即第一个字符的地址)赋值给了指针变量。 //abc保存在常量区,而str只保存了字符串常量的首地址
注意:使用字符数组保存的字符串保存在栈区,保存在栈区里的内容是可读可写的;使用字符串指针保存字符串时,字符串是保存在常量区,保存的是字符串常量的首地址,常量区的内容是不可以修改的。
读取字符串量的每个字符的示例代码:
什么是指针?
指针就是地址,对一个内存单元来说,单元的地址即为指针,其中存放的数据是单元的内容。
变量的存取方式有两种:a. 直接存取——通过变量名存取
b. 间接存取——通过地址(指针)存取
2. 指针变量——存放指针(地址)的变量
注意事项:1. 指针是一个地址,是常量
2. 指针变量存放地址,是一个变量
指针变量的定义:
类型名 *变量名; eg: int *p; //p是一个指针变量,存放int类型变量的地址
指针变量注意事项:
定义指针变量时,“*”必须有,没有就相当于定义一个普通变量
不能用指针变量存放数值或字符
指针变量也是变量,有全局和局部之分
3. 指针变量的初始化:
定义的同时初始化
eg: int a = 3;
int *p=&a; //指针变量p指向a
int *p1 = &a, *p2 = &a;
b. 先定义后初始化
eg: int *pointer;
pointer=NULL; //此种方式最好不用,会造成野指针
c. 定义一个变量但不指向
eg: int *pointer=NULL;
注意事项:a. 多个指针可以指向同一个地址
b. 指针可以改变指向
c. 指针如果没有初始化,里面存放的是垃圾值,称为野指针
4. 指针变量的引用
使用“*”获取指针变量对应的存储单元 eg: *p = 100; //指针变量p指向的变量被赋值100
value = *p; //引用指针变量给value赋值100
1. 什么是指针?
指针就是地址,对一个内存单元来说,单元的地址即为指针,其中存放的数据是单元的内容。
变量的存取方式有两种:a. 直接存取——通过变量名存取
b. 间接存取——通过地址(指针)存取
2. 指针变量——存放指针(地址)的变量
注意事项:1. 指针是一个地址,是常量
2. 指针变量存放地址,是一个变量
指针变量的定义:
类型名 *变量名; eg: int *p; //p是一个指针变量,存放int类型变量的地址
指针变量注意事项:
定义指针变量时,“*”必须有,没有就相当于定义一个普通变量
不能用指针变量存放数值或字符
指针变量也是变量,有全局和局部之分
3. 指针变量的初始化:
定义的同时初始化
eg: int a = 3;
int *p=&a; //指针变量p指向a
int *p1 = &a, *p2 = &a;
b. 先定义后初始化
eg: int *pointer;
pointer=NULL; //此种方式最好不用,会造成野指针
c. 定义一个变量但不指向
eg: int *pointer=NULL;
注意事项:a. 多个指针可以指向同一个地址
b. 指针可以改变指向
c. 指针如果没有初始化,里面存放的是垃圾值,称为野指针
4. 指针变量的引用
使用“*”获取指针变量对应的存储单元 eg: *p = 100; //指针变量p指向的变量被赋值100
value = *p; //引用指针变量给value赋值100
指针使用实例代码
/** *用指针实现交换两个变量的值 */ #include <stdio.h> void exchange(int *p1,int *p2){ //交换p1,p2两个地址中的内容 int temp; temp=*p1; *p1=*p2; *p2=temp; } int main(int argc, const char * argv[]) { int a=5,b=7; exchange(&a, &b); printf("a=%d\tb=%d",a,b); return 0; }
二级指针:指针变量指向指针
int c=5; int *p=&c; //p是一个一级指针 int **p1=&p; //p1是一个二级指针
数组指针:指向数组元素的指针
数组指针的作用:使用数组指针间接访问数组的元素
数组元素的初始化:
int a[2]={1,2};
int *p=&a; //p指向数组的第一个元素
数组指针和数组名的区别:
p是一个指针变量,它存放的值是可以改变的,*p++是可以的,而数组名是一个常量,不能进行自增或自减
使用指针把数组逆序的示例代码:
#include <stdio.h> void changeArr(int a[],int len){ //数组指针指向数组a int *p=a; //循环把前后对应位置的元素值交换 for (int i=0; i<=len/2; i++) { int temp; temp=*(p+i); *(p+i)=*(p+len-i-1); *(p+len-i-1)=temp; } } int main(int argc, const char * argv[]) { int a[5]={1,2,3,4,5}; changeArr(a, 5); for (int i=0; i<5; i++) { printf("%d\t",a[i]); } return 0; }
一维指针数组
指针数组:数组元素的值是指针
一维指针数组的定义
类型说明符 *数组名[数组长度] eg:int *p[3];
指针数组的使用举例:
int a=3, b=4, c=5;
int *p[3]={&a, &b, &c};
通过数组元素访问a的值如下:
printf("a=%d\n",*p[0]);
通过数组名访问a的值如下:
printf("a=%d\n",**p);
二维数组指针的定义
数据类型 (*指针变量名)[二维数组的列数]
eg: int (*p1)[4];
二维数组指针的初始化
int a[2][3]={0,1,2,3,4,5};
int (*p)[3]=a;//定义一个指向数组a的行指针
二维数组指针的引用——*(*(p+i)+j) //获取二维数组的每一个元素
for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { //输出二维数组的每一个元素 printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j)); } }
一维指针数组和二维数组指针的区别:指针数组表示的是多个指针,二维数组指针变量是一个单个变量
字符串指针——指向字符串
定义格式:char *变量名="字符串内容"; //字符串指针指向字符串
char *p1= &ch; //字符指针
根据赋值的类别来区分是字符指针还是字符串指针。
char *str="abc";把字符串常量的首地址(即第一个字符的地址)赋值给了指针变量。 //abc保存在常量区,而str只保存了字符串常量的首地址
注意:使用字符数组保存的字符串保存在栈区,保存在栈区里的内容是可读可写的;使用字符串指针保存字符串时,字符串是保存在常量区,保存的是字符串常量的首地址,常量区的内容是不可以修改的。
读取字符串量的每个字符的示例代码:
#include <stdio.h> #include <string.h> int main(int argc, const char * argv[]) { //定义一个字符串指针,指针保存字符串首地址 char *str="Hello susie!"; //循环遍历字符串的每一个字符 for (int i=0; i<strlen(str); i++) { printf("%c",*(str+i)); } return 0; }
什么是指针?
指针就是地址,对一个内存单元来说,单元的地址即为指针,其中存放的数据是单元的内容。
变量的存取方式有两种:a. 直接存取——通过变量名存取
b. 间接存取——通过地址(指针)存取
2. 指针变量——存放指针(地址)的变量
注意事项:1. 指针是一个地址,是常量
2. 指针变量存放地址,是一个变量
指针变量的定义:
类型名 *变量名; eg: int *p; //p是一个指针变量,存放int类型变量的地址
指针变量注意事项:
定义指针变量时,“*”必须有,没有就相当于定义一个普通变量
不能用指针变量存放数值或字符
指针变量也是变量,有全局和局部之分
3. 指针变量的初始化:
定义的同时初始化
eg: int a = 3;
int *p=&a; //指针变量p指向a
int *p1 = &a, *p2 = &a;
b. 先定义后初始化
eg: int *pointer;
pointer=NULL; //此种方式最好不用,会造成野指针
c. 定义一个变量但不指向
eg: int *pointer=NULL;
注意事项:a. 多个指针可以指向同一个地址
b. 指针可以改变指向
c. 指针如果没有初始化,里面存放的是垃圾值,称为野指针
4. 指针变量的引用
使用“*”获取指针变量对应的存储单元 eg: *p = 100; //指针变量p指向的变量被赋值100
value = *p; //引用指针变量给value赋值100
相关文章推荐
- 一个对战程序的C++源代码
- UE4 - C++ 射线捕捉
- C语言实现去除字符串中空格
- C++学习_继承覆盖重载
- C++学习随笔
- C++学习之继承篇
- C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等
- Observer(观察者)设计模式
- C语言 变量的存储方式和生命周期
- c++ BASE64加解密操作
- b树的实现(c++)
- N种方法使用C++调用C#.NET库
- C语言strcat()函数:连接字符串
- C语言里的puts()函数怎么用
- 【C++】UTF-8字符和GB2312字符相互转换函数
- 编译原理实验之语法分析(算符优先分析算法(C语言))
- C++之测试snmp的注册模块
- C++之IPC测试单元
- C语言程序设计MOOC视频开讲了
- C++之位测试练习的相关代码