栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言学习(五)——指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言学习(五)——指针

Ps:相信学过C语言的同学都知道,指针是C语言中最重要也是最难攻克的部分,下面的代码中的注释部分请同学们要仔细阅读

一、指针&指针变量  
#include
#include
#include
#include


//32位编译器(0x0000 0000-0xffff ffff):
//指针变量:
//存放指针(地址)的变量
//因为地址编号(0x0000 0000)如此,所以我们指针变量占4个字节就可以存下
//64位编译器(0x0000 0000 0000 0000-0xffff ffff ffff ffff):
//指针变量占8个字节


//指针变量的定义和初始化
//指针变量的定义:

int main01()
{
	using namespace std;
	int a = 10;
定义指针的步骤:
	1.*与符号结合代表是一个指针变量
	2.要保存谁的地址,将他的定义形式放在此处
	3.用*p替换掉定义的变量
	定义指针变量的格式:
	数据类型   *    变量名
	!!注意!!指针变量的类型是  数据类型*(例:int *p的指针变量类型是int*,p是变量!!)
	int* p;
	分析
	与*结合代表这是一个指针变量
	p是变量,p的类型是将变量p本身拖黑,剩下的类型就是指针变量的类型
	指针变量p用来保存什么类型数据的地址,将指针变量p和指针变量p最近的*一起拖黑,
	//剩下什么类型就保存什么类型数据的地址
	p = &a;
	int* i_porint = &a;
	system("pause");
	return (0);

}


//指针的使用
//指针变量保存了谁的地址就指向了谁
int main02()
{
	//在使用(最常见是赋值时,因为等号两边数据类型要匹配)时,对一个表达式取*,就会对表达式减一级*,如果对表达式取&,就会加一级*
	using namespace std;
	int a = 10;
	int* p = &a;
	*p = 100;//在使用时,*与p结合代表,取p指针所指向的那块空间的内容
	cout << *p << endl;/

	

	system("pause");
	return (0);
}


int main09()
{
	using namespace std;
	const int* p;//const在这里修饰的是*
	int a = 10;
	p = &a;//不能通过*p,改p所指向空间的内容
	/
	//char* arr[3] = { "heihei","haha","xixi" };//把三个字符串常量的首地址存在数组里面
	for (int i = 0; i < 3; i++)
	{
		cout << arr[i] << endl;//输出了三个字符串常量
	}
	cout << *arr[0] << endl;//输出结果为h;
	cout << *(arr[1] + 1) << endl;//输出结果为a
	system("pause");
	return 0;
}



//字符指针数组作为main函数参数
//.exe
//在没有给文件命令参数时,argc中保存的是1    argv中保存的是。exe文件的路径
//点击项目名称,右击选择属性-->调试-->命令参数处可以为main函数传参,各个参数的首地址存放在argv数组中
//char* argv[] = {".*.exe","hello","123456"};

//argc是执行可执行程序的参数个数
//argv是一个字符指针数组,保存的是参数(字符串)的首元素地址
int main(int argc, char* argv[])
{
	cout << argc << endl;
	cout << argv[0] << endl;
	cout << argv[1] << endl;
	cout << argv[2] << endl;
	cout << argv[3] << endl;
	system("pause");
	return 0;
}
五、指针练习
#include
#include
#include
#include

using namespace std;
//1.找出数组中第二大的数,(使用*操作数组元素个数,不要使用[])
int main03()
{
	int a[] = { 100,100,100,234,123,500,32,68,41,99,13,71 };
	int* p = a;
	int* q = (int*)(&a + 1) - 1;
	int temp = 0;
	for (int i = 0; i < (q - p); i++)
	{
		for (int j = 0; j < (q - p) - i ; j++)
		{
			if (*(p + j) > *(p + j + 1))
			{
				temp = *(p + j);
				*(p + j) = *(p + j + 1);
				*(p + j + 1) = temp;
			}
		}
	}
	cout << *(q-1) << endl;
	cout << q-p << endl;
	system("pause");
	return 0;
}



//不使用库函数,实现字符串拷贝功能
//char src[100] = "hello";
//char dst[100];  //把src的内容拷贝给dst
//函数名:void my_strcpy(char dst[],char src[]);




int main04()
{
	char src[100] = "hello";
	char dst[100] = {0};
	char* p = src;
	char* q = dst;
	int i = 0;
	for (i = 0; *(p + i) != ''; i++)
	{
		*(q + i) = *(p + i);
		//dst[i] = src[i];
		//q[i] = p[i];
		//*(dst+i) = *(src+i);
		//四者等价

	}
	*(q + i + 1) = '';//补结束符
	cout << "src= " << src << endl;
	cout << "dst= " << dst << endl;
	
	system("pause");
	return 0;
}
   

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号