指针与数组形参在数值修改的特点
来源:互联网 发布:网站源码交易php源码 编辑:程序博客网 时间:2024/05/29 17:51
指针的概念:指针用于指向对象,定义方法DataType *elem,可以用对变量取地址操作符“&”来初始化指针,例如:elem=&var1,在指针上加一个整型数值,其结果仍然是指针。
指针操作变量的方法:指针通过解引用操作符(“*”)获取指针指向的对象,从而实现间接操纵其所指对象的功能。例如:
string s(“hello world”);
string *sp=&s;
*sp=”goodby”; //the value of s will be changed
cout<<*sp;
指针与数组:二者关系密切可以自动转换。例如:
int ia[]=
int *ip=ia; //等同于int *ip=&ia[0];
测试指向数组的指针与数组直接的关系;
1、 ip+i与数组&ia[i]之间的关系;(相等)
2、 *(ip+i)与数组ia[i]之间的关系;(相等)
3、 对ip值修改对数组ia的影响;(无影响)
4、 对ip做解引用后,修改*(ip+i)的值,对数组ia的影响。(相应做了修改)
测试指针与数组在函数中做形参时,形参在函数体中其值有修改,这种修改是否会导致调用体的传入变量有所修改。
可分成以下几种情况进行讨论:
1、 形参为指针,函数内修改其所代表的数组的值,将导致主函数变量的值发生变化,而形参为数组则不会导致修改;
#include <iostream>
void f1(char *s1, char [6] ar)
{
s1[0]='o';
s2[1]='k';
ar[0]='a';
ar[1]='r';
}
void main()
{
char* s1=new char[6];
s1[0]='h';
s1[1]='e';
s1[2]='l';
s1[3]='l';
s1[4]='o';
s1[5]='/0';
char ar[6];
ar[0]='h';
ar[1]='e';
ar[2]='l';
ar[3]='l';
ar[4]='o';
ar[5]='/0';
std::cout<<"s1:"<<s1<<std::endl;
std::cout<<"ar:"<<ar<<std::endl;
f1(s1,ar);
std::cout<<"s1:"<<s1<<std::endl;
std::cout<<"ar:"<<ar<<std::endl;
getchar();
return 0;
}
输出结果:
s1:hello
ar:hello
s1:okllo
ar:hello
2、 想通过在函数体内实现指针的移动来实现主函数的指针指向对象发生变化是无效的,但是如果通过引用的话则可以;
#include <iostream>
void f2(char *s1)
{
s1++;
}
void main()
{
char* s1=new char[6];
s1[0]='h';
s1[1]='e';
s1[2]='l';
s1[3]='l';
s1[4]='o';
s1[5]='/0';
char *p1=s1;
for (int i=0;i<6;i++)
{
std::cout<<"s1["<<i<<"]:"<<*p1<<std::endl;
f2(p1);
std::cout<<"s1["<<i<<"]:"<<*p1<<std::endl;
}
getchar();
return 0;
}
输出:
s1[0]:h
s1[0]:h
s1[1]:h
s1[1]:h
s1[2]:h
s1[2]:h
s1[3]:h
s1[3]:h
s1[4]:h
s1[4]:h
s1[5]:h
s1[5]:h
- 指针与数组形参在数值修改的特点
- 数值指针与指针数组
- 函数与数组的特点
- 数值数组与Object数组的关系
- WM_COPYATA 与 PostMessage/SendMessage;const 的变量通过指针修改后?;指针与数组名
- 二维数值与指针
- 指针数值与二级指针
- 【c++程序】通过指针修改定义的数值
- 指针数组与数组指针的使用
- 数组指针与指针数组的区别
- 数组指针与数组元素的指针
- 数组指针与指针数组的区别
- 数组指针与指针数组的区别
- 数组指针与指针数组的区别
- 数组指针与指针数组的区别
- 数组指针与指针数组的区别
- 数组指针与指针数组的区别
- 指针数组与数组指针的认识
- 侠盗飞车秘籍-侠盗秘籍-飞车4飞车5密籍
- VS2008发布、生成网站时如何设置固定的dll文件名?
- vb excel导入到sql server
- 该记住的常识
- js相关事件
- 指针与数组形参在数值修改的特点
- c++工厂模式
- Linux下./configure错误详解
- 你的交际力能否通吃?
- JNI
- 5种创建型模式的权衡的讨论
- javascript 弹出动画对话框
- 关于在php中如何使用session和Cookies
- Linux 2.4.x内核同步机制