指针 学习笔记1

用指针打印一个数组的全部元素:

#include<iostream>

using namespace std;

int main()
{
	int i=0;
	int arr[8];

	for(i=0;i<8;i++)
		arr[i]=i;

	int *p;
	
	i=0;
	for(p=arr;i<8;p++)
	{
		cout << *p << " " ;
		i++;
	}
	return 0;
}

当一个字符指针指向一个字符串时,表示如下;

char * str="C++ string";
定义了一个字符指针str,并将其初始化为字符串C++ string的首地址。

对字符串中的字符进行存取时,既可以采取数组下标的方式,也可以采取指针的方式。例:

#include<iostream>
using namespace std;


int main()
{
	int i=0;
	char arr[]={"C++ ,String Arrary"};
	char* p1,* p2;
	p2="C++,String";
	i=1;
	for(p1=arr;*p1!='\0';p1++)
	{
		cout << *p1;
		i++;
	}
	cout << endl;
	cout << "there are" << i << "characters"
		<< "in the string above" << endl;
	cout << "the char ponter p2 is pionter to " 
		<< "string\""<< p2 << "\"." <<  ",";
	cout  << "*p2=" << *p2 << ",";
	cout << "p2[6]=" << p2[6] << endl;
	return 0;
}

结果。

·指针数组,数组指针和多级指针。

指针数组定义:就是指针的集合,每个元素均为指针类型,即有指针变量构成数组。

例如: double * pArray[6] ;

下面实现一个简单的要求用户输入密码并进行验证的程序:

#include<iostream>
using namespace std;

int main()
{
	int accNO;
	int pss;

	char* pMessages[5]=
	{
		"hello,welcome to the system!",
			"enter you accout number:",
			"password:",
			"invalid accout number or password is wrong ,please try again.",
			"thank you for your visit.bye!",
     };

cout << pMessages[0] << endl;
cout << pMessages[1];
cin >> accNO;
cout << pMessages[2];
cin >> pss;

while(accNO>1000||pss!=123)
{
	cout << pMessages[3] << endl;
	cout << pMessages[1];
	cin >> accNO;
	cout << pMessages[2];
	cin >> pss;
}
cout << pMessages[4];
return 0;
}
运行结果:



多级指针:指向指针的指针。

char ** pPointer;

指向指针的指针的运算与指针运算完全相同。需要注意的是,因为指向指针的指针层次很父子,使用是时候要小心。注入*ppointer这样的语句代表的是一个指针,仍然可以进行指针运算。下面一个列子:

#include<iostream>
using namespace std;

int main()
{
	int i;
	char* pArray[7]=
	{
		"monday",
		"tuesday",
		"wednesday",
		"thursday",
		"friday",
		"saturday",
		"sunday"
	};
	//定义一个指向指针的指针
	char** pPointer;

	pPointer=pArray; 
	cout << "here are the seven days of a week:" << endl;
	for(i=0;i<7;i++)
	{
		cout << "day"<< i+1 << ":";
		cout << *pPointer << endl;
		pPointer++;
	}
	
	return 0;
}

运行结果: 原理图:


--------指针作为函数参数:当指针作为函数参数时候,从本质上来说,它仍遵循值传递的原则,即形参指针只是实参指针的一个副本。但是,由于指针的地址的特征,当使用“*”运算符时候,形参指针和实参指针指向同一个内存区域,从而可以在函数体内改变实参指针多指向的变量的值。

所以,当程序需要改变参数值时,往往将参数的地址作为参数传递给函数,以便使函数能够修改产生的值。

--------数组名作函数参数。

用数组名做函数参数与用数组元素作实参不同。

1、用数组名做函数参数时,要求形参和性对应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参二者不一致时候,就会发生错误。

2、在用数组名做函数参数时,并不是进行的值的传递,既不是吧实参数组每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。它传递只是地址的传递,也就是吧实参数组的首地址赋予形参数组名。形参数组名取得该首地址后,也就等于有了实际存在的数组。实际上,形参数组跟实参数组为同一个数组,共同拥有一段内存空间。例如:

#include<iostream>
using namespace std;

void PrintArray(int a[8] );// void PrintArray(int a[]);

int main()
{
	int test[8];
	int i;

	for(i=0;i<8;i++)
	{
		test[i]=i;
	}
	for(i=0;i<8;i++)
	{
		cout << test[i] << " ";
	}

	PrintArray(test);
	cout << "after change" << endl;
	for(i=0;i<8;i++)
	{
		cout << test[i] << " ";
	}
	return 0;
}

void PrintArray(int a[8])// void PrintArray(int a[]);
{
	int i;
	for(i=0;i<8;i++)
	{
		a[i]=a[i]+1;
	}
}


运行结果:


一定要记住函数声明,主函数,函数定义。一定要注意形参跟实参数组类型必需一致。

-




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值