指针
来源:互联网 发布:jquery json数组 移除 编辑:程序博客网 时间:2024/06/05 20:43
char name;
char *pname; ##################定义了指向字符变量的指针变量
pname = &name; ##################这是取同类型数据的变量的地址赋值给指针变量
###表示:1---将字符变量name的地址赋值给指针变量pname,指向该字符变量
#######:2---取变量name地址:“&”取地址运算符:只能取内存中变量的地址,不能取表达式或常量的地址
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
char stuname;
char name;
char *pname = &name;
char *pstuname = pname; #################这是同类型指针变量相互赋值:
####:pname和pstuname同时指向字符变量name,他们的值都是该变量的地址
#####:前提是:pname指针已经获得确切地址,否则,不能把该指针变量赋值给另一指针变量
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
char name;
char *pname;
char *pstuname;
pstuname = pname;
char ch = *pstuname;
###:因为pname存储的地址未确定,也即指针变量没有指向具体的内存单元,没有指向具体的变量
####:指针变量使用前必须指向具体有效的内存单元
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int num;
int *p;
p = #
*p = 5;
############:通过指针变量访问所指向的变量
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type name;
type_a aname;
type *p;
p = &name;
p = &aname;--------------------wrong !!!
##############################:指针变量只能指向相同类型的变量;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
指针与整数之间:相加减
int Num[4] = {12,13,14,15};
int *p_int;
p_int = Num; ####:指针变量指向指向数组的第一个元素:p_int = &Num[0]
p_int++; ###:指向下一个元素Num[1]
p_int = p_int+2; ###:指向Num[3]
################:数组名就是数组中第一个元素地址,是元素的地址,是第一个元素。
#################:指向数组元素的指针变量加一:表示移动数组元素大小的字节数
总结:type类型数组数组Num[],当指针p指向type类型数组的第一个元素时,p=p+n后,p指向Num[n],地址改变了n*sizeof(type)大小
同理:p=p-n,则是向前移动
总之,向前不能超过数组第一个元素,向后不能超过最后一个元素
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
指针之间:相减不能相加
前提是两个指针指向同一个数组,否则没有意义:
int Num[5] = {11,12,13,14,15};
int *p_a = &Num[0];
int *p_b = &Num[3];
int i = p_b - p_a;
i = 2;
#################:结论就是:两个指向同一数组的元素的指针变量相减,结果等于两个指向的元素之间的元素个数
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
数组:数组元素都是同一数据类型,不能混合。
int num[7] = {1,2,3,4,5,6,7}; ####:int类型数组,编译器认为num[]只能存放int类型的数据
char sstr[26]; ####:char类型数组
char str[] = {" LOVE"}; #####:字符数组初始化为字符串,会在最后添加字符串结束标志:“\0”
元素值 :空格 L O V E \0
数组元素:str[0] str[1] str[2] str[3] str[4] str[5]
内存地址:0xa0 0xa1 0xa2 0xa3 0xa4 0xa5
float dat[10]; ####:float类型数组
数组 = 数组名+数组元素类型+数组元素个数+初始化;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
引用数组元素
int num[5] = {11,12,13,14,15};
int *p;
p = num; 指向数组------------------------------------------数组指针:用数组名赋值给指针变量
p = num[0];指向数组元素
第一个元素是:num[0]
第一个元素地址是:&num[0]
数组名:num : 就是数组第一个元素num[0]的地址,是一个地址常量。 数组首地址=数组首元素地址**********数组首元素地址常量****************************************
所以:num和&num[0]指向同一单元
结论:指针可以指向数组(数组名),也可以指向数组元素。
使用数组元素时:num[3]等,必须知道该元素的下标,该元素在数组中的位置
使用数组元素时:指针。
数组:以数组第一个元素的首地址开始的一段内存块。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
char str[] = "iGLC1314520";
char *pstr; ######:字符指针可以指向普通变量;可以指向数组
pstr = str; #####:将字符数组名赋值给字符指针变量;字符数组初始化为字符串和其他初始化有区别:字符串会自动加上“\0”,其他则没有。
######:str和pstr都是指向数组第一个元素,前者地址常量,后者变量
pstr = &str[3];可以指向数组元素
***********************str值等于&str值*********************************
数组名和&数组名值相等,但是含义不同:前者是数组首元素的地址常量,偏移为数组元素大小;后者是整个数组的首地址,偏移为整个数组大小
int a[10];
&a[0] 类型是int
a 类型是int a[10]
&a 类型是int (*)[10]
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int a[10]
**************
a+0 第0个元素地址
a+1 第1个元素地址
。。。。。
a+9 最后一个元素地址
'''''''''''''''''''''''''
*(a+0) 第0个元素的内容
*(a+1) 第1个元素内容
。。。。。
*(a+9) 最后一个元素内容
''''''''''''''''''''''''''''
&a+0 int(*)[10]类型的首地址
&a+1 偏移int(*)[10]大小
&a+2
。。。。。
&a+n
'''''''''''''''''''''''''''''''''
我们把数组看成基本数据类型变量:int[10]
&a:就是变量a的地址,a的作用范围是10个int
若将&a赋值给指针变量,则必须定义为int(*)[10]类型,
int (*p)[10];
p = &a;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
指针类型数组
type *数组名[数组元素个数]
int *num[3];
char *argv[5] = {“china”,"German","iGLC1314520",NULL,NULL};
argv[0] argv[1] argv[2] argv[3] argv[4]
"china" "German" "iGLC1314520" NULL NULL
char*argv[] = {"gbhgtfbgfd","bhgnhg"," advg"};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
char *pstr = "egtrhdrtbher";
。。。。。。。。。。。。。
char *pstr;
pstr = "degfvtrshty";
char *str[] = "strjhnrthvceshyuu";
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
函数中参数:普通参数和指针参数,传递的都是值,前者传递变量的数值,后者传递变量的地址值
函数传递:总是单向的值传递
指针作函数参数:传递变量的地址,传递指针变量的值,函数调用时,将该参数传递给函数内部处理
实际上,就是让形参同时指向实参指向的数据单元
所以,同样是值传递和单向传递,普通参数和指针参数不同:
1-----普通参数,传递变量本身的数值,函数调用时,不能同时对这些实参变量值改变
2-----指针参数,以变量、函数等的指针作为参数,传递变量(地址)本身的值,通过地址直接改变主调函数变量的值
结论:想在被调函数中改变实参值,就用指针变量
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 找出一个字符数组(元素不重复)所有可能字符的组合
- 【读书笔记】架构是最高层次的规划和难以改变的决定
- XML转JSON
- MySQL多表查询
- A1101. Quick Sort (25)
- 指针
- 独木舟上的旅行
- ANDROID开发之SQLite详解
- 安装包制作软件 Inno Setup 5.5.4 汉化版(简体中文定制版)
- 跨平台安装与使用QWT--windows7
- 所谓的Unity多线程
- 设计模式之命令模式
- ArcGIS API for JavaScript开发环境搭建及第一个实例demo
- 日经春秋 20150923