第五次c++打卡,逐渐丝滑



一、数组剩余知识

1.多维数组

二维数组表达形式:a[ 行下标 ] [ 列下标 ]

#include<iostream>
using namespace std;
main()
{
    
    
	//声明二维数组 
	int a[2][3],i,j;
	//逐个输入(i为行,j为列) 
	for(i=0;i<2;i++)
	 {
    
    
	   for(j=0;j<3;j++)
	   {
    
    
	   	cout<<"a["<<i<<"]["<<j<<"]=";
	   	cin>>a[i][j];
	   }	
	 }
	cout<<endl;
	//显示二维数组 
	for(i=0;i<2;i++)
	 {
    
    
	   for(j=0;j<3;j++)
	   {
    
    
	   	cout<<"a["<<i<<"]["<<j<<"]=";
	   	cout<<a[i][j]<<"\t"; 
	   }	
	   cout<<endl;
	 }
	 
	//找出最大之元素及下标
	int max=a[0][0],h=0,k=0; 
	for(i=0;i<2;i++)
	 {
    
    
	   for(j=0;j<3;j++)
	   {
    
    
	   	 if(a[i][j]>a[h][k])
	   	 {
    
    
	   	  h=i;k=j;max=a[i][j];	
		 }
       }
     }
     cout<<"\n max="<<max<<"下标为:"<<h"\t"<< k; 
}

2.字符数组

字符数组类型为“char”

#include<iostream>
using namespace std;
main()
{
    
    
	char a[]={
    
    'a','b','c','d'};
	a[2]='\0';   //注意这里!
	cout<<"\n a[0]="<<a[0];
	cout<<"\n a[1]="<<a[1];
	cout<<"\n a[2]="<<a[2];
	cout<<"\n a[3]="<<a[3];
	cout<<"\n a[4]="<<a[4];
	cout<<"\n a="<<a;
}

字符变量遇到’\0’就结束输出。同时该位置表现为空格
在这里插入图片描述

顺便给大家整个活 L(=0 U 0=)/

#include<iostream>
using namespace std;
main()
{
    
    
	char str[6];

    cout<<"输入str=";
    cin>>str;
    //直接显示字符数组(普通数组不行) 
    cout<<"直接输出str:"<<str<<endl;
    //
    for(int i=0;i<6;i++)
    {
    
    
    	cout<<endl<<"循环输出str:";
    	cout<<str[i];
	}
	cout<<endl;
	
	//反向输出字符串
	cout<<endl<<"反向输出str:";
	for(int i=5;i>=0;i--)
	{
    
    
		cout<<str[i];
	}
	cout<<endl;
	
	cout<<endl<<"大写输出str:";
	for(int i=0;i<6;i++)
    {
    
    
    	str[i]-=32;
    	cout<<str[i];
	}
	cout<<endl; 
}

在这里插入图片描述

二、指针入门儿

1.指针先生与取地址运算

0:指针概念的定义
(NULL)
1:指针变量的声明
类型名 *指针变量 (为防止误操作,我们将指针变量指向一个空地址NULL)
例如 : int *fp1=NULL
__ __ _float fp2=NULL
__ __ _char
fp3=NULL

2:取地址符和取内容运算
运算符“&”表示 获取右端变量的地址
例如: &变量
_ _ _ _ fp1=&n //fp1取得变量n的地址
注意,指针变量只能表示相同类型的变量地址,否则会报错。

如:int 类型 *fp只能储存 int 型变量,不能放置float变量。


运算符“*”表示 获取右端指针地址的内容,它和“&”互为逆运算
例如:

int a=100 *fp1;
fp1=&a;__________//注意:“ fp1”此时表示地址
cout<<"*fp1="<<*fp1 //注意:“ *fp1”此时表示值

结果>>>*fp1=100

代码如下:

#include<iostream>
using namespace std;
main()
{
    
    
	int a,b,c,*fp=NULL;
	a=100;
	fp=&a;     //使指针指向变量a
	cout<<"a="<<a<<endl;
	cout<<"fp="<<fp<<endl;
	cout<<"*fp="<<*fp<<endl<<endl;
	
	fp=&b;     //使指针指向变量b
	b=200;
	cout<<"b="<<b<<endl;
	cout<<"fp="<<fp<<endl;
	cout<<"*fp="<<*fp<<endl<<endl;
	
	fp=&c;     //使指针指向变量c
	*fp=a+b;
	cout<<"c="<<c<<endl;
	cout<<"fp="<<fp<<endl;
	cout<<"*fp="<<*fp<<endl<<endl;
	
	//fp表示地址,需要用"&"取地址运算符
	//*fp表示fp地址的值,需要用"*"取内容运算符
	//地址都是用32进制储存(也有可能是64进制)
	//int类型占用四个byte(字节),因此一同声明的变量a,b,c排列整齐 
	//赋值并不会影响变量的地址,因此fp取地址后依然可以运算该变量哦! 
 } 

2.指向数组的指针

指向数组的指针是常用知识,可以用以下几种方式表示:

  1. p=*a
  2. p=&a[0][0]
  3. p=*(a+0)

下面的这张图可以很好地表示 :在表达一个完整的二维数组时,指针随着数组的移动而发生的变化。
在这里插入图片描述

代码如下:

#include<iostream>
using namespace std;
/*上面内容复习:
"&"是取地址运算,"*" 是取内容运算
fp本质上是一个地址,
*fp可以作为内容被声明,赋值和运算 */
main()
{
    
    
int  a[2][3]={
    
    1,2,3,4,5,6},count;
//也可以用 a[2][3]={
    
    {1,2,3},{4,5,6}}对多维数组赋值
     
int *fp; 
    /*以下这行代码是重中之重*/
fp=&a[0][0];//不可以用*fp=a[0][0]

for(int i=0;i<2;i++)
  {
    
    
	for(int j=0;j<3;j++)
	{
    
    
		cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
		//可以用图片中的信息来解答下面这行代码 哦 
		cout<<"**a["<<i<<"]["<<j<<"]="<<*(fp+count)<<endl;
		count+=1;
	}
  }	  
  
for(int i=0;i<2;i++)
  {
    
    
	for(int j=0;j<3;j++)
	{
    
    
		cout<<"a["<<i<<"]["<<j<<"]="<<&a[i][j];
		cout<<"\t"<<a[i][j]<<endl; 
	}
  }	
  
}

3.指针变量的运算

此处结合具体的数组了解更佳。等待完善

#include<iostream>
using namespace std;
main()
{
    
    
	int a[]={
    
    1,2,3,4,5,6};
	int *ip1,*ip2;
	
	//指针的赋值运算
	ip1=a;
	ip2=ip1;
	cout<<"ip1="<<(*ip1)<<endl;
	cout<<"ip2="<<(*ip2)<<endl; 
	
	//指针的自增自减运算
	ip1++;
	ip2+=4;
	cout<<"ip1="<<(*ip1)<<endl;
	cout<<"ip2="<<(*ip2)<<endl; 
	
	//也可以进行布尔值运算 
	int n=ip2>ip1;
	cout<<"ip2>ip1="<<n<<endl;
	cout<<"ip2!=NULL="<<(ip2!=NULL)<<endl;
	
	//指针之间也可以加减 
	n=ip2-ip1;
	//记住是“ip2-ip1”而不是“&ip2-&ip1”。地址不可运算 
	cout<<"ip2-ip1="<<n<<endl;
	 
 } 

总结

以上就是今天要讲的内容,本文仅仅简单介绍了指针的应用,现在大家也算是半步踏入了指针的大门了。敬请期待下一期吧

猜你喜欢

转载自blog.csdn.net/m0_53590279/article/details/115674988
今日推荐