C语言学习——指针精华(1)

C语言学习——指针精华(1)C语言精华-指针01指针变量的引用代码入下://通过指针变量访问整型变量#include <stdio.h>int main(void){ int a, b, *p1, *p2; a = 100; b = 10; p1 = &a; p2 = &b; printf(“a=%d, b=%d\n”, a, b); printf(“*p1=%d…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

C语言精华-指针01

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
指针变量的引用
代码入下:

//通过指针变量访问整型变量
#include <stdio.h>

int main(void)
{ 
   
	int  a, b, *p1, *p2;
	a = 100; b = 10;
	p1 = &a; p2 = &b;
	printf("a=%d, b=%d\n", a, b);
	printf("*p1=%d, *p2=%d\n", *p1, *p2);
	printf("&a=%x, &b=%x\n", &a, &b);
	printf("p1=%x, p2=%x\n", p1, p2);
	printf("&p1=%x, &p2=%x\n", &p1, &p2);

	return 0;
}

结果为:
在这里插入图片描述

指针变量作为函数参数—地址传递
【工程案例】将数从大到小输出:

#include <stdio.h>
void swap(int  x, int y)  
{ 
   
	int  temp;
	temp = x;
	x = y;
	y = temp;
}
int main(void)
{ 
   
	int a, b;
	scanf_s("%d,%d", &a, &b);
	if (a<b)  swap(a, b);
	printf("\na=%d,b=%d\n", a, b);
	return 0;
}

值传递!!!!!!!!!!!!!!!!!!!!!!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【工程案例】将数组a中n个整数按相反顺序存放。
方法一:

//⑴ 实参与形参均用数组
#include <stdio.h>
void inv(int  x[], int n);
int main()
{ 
   
	int i, a[10] = { 
    3, 7, 9, 11, 0, 6, 7, 5, 4, 2 };
	printf("The original array:\n");
	for (i = 0; i<10; i++)   
		printf("%4d",a[i]);
	printf("\n");
	inv(a, 10);
	printf("The array has been inverted:\n");
	for (i = 0; i<10; i++)   
		printf("%4d", a[i]);
	printf("\n");
	return 0}

void inv(int  x[], int n)
{ 
   
	int temp, i, j, m = (n - 1) / 2;
	for (i = 0; i <= m; i++){ 
   
		j = n - 1 - i;
		temp = x[i];  x[i] = x[j];  x[j] = temp;
	}
	return;
}

结果为:
在这里插入图片描述
方法二:

//⑵ 实参用数组,形参用指针变量
#include <stdio.h>
void inv(int  *x, int n);
int main()
{ 
   
	int i, a[10] = { 
    3, 7, 9, 11, 0, 6, 7, 5, 4, 2 };
	printf("The original array:\n");
	for (i = 0; i<10; i++)   printf("%4d",a[i]);
	printf("\n");
	inv(a, 10);
	printf("The array has been inverted:\n");
	for (i = 0; i<10; i++)   printf("%4d",a[i]);
	printf("\n");
	return 0;
}
void inv(int  *x, int n)
{ 
   
	int temp, *p, *i, *j, m = (n - 1) / 2;
	i = x;  j = x + n - 1;  p = x + m;
	for (; i <= p; i++, j--){ 
   
		temp = *i;  *i = *j;  *j = temp;
	}
	return;
}

结果为:
在这里插入图片描述
方法三:

//(3)实参与形参均用指针变量
#include <stdio.h>
int main()
{ 
   
	void inv(int *x, int n);
	int i, arr[10], *p = arr;
	printf("The original array:\n");
	for (i = 0; i<10; i++, p++)
		scanf_s("%d", p);
	p = arr;  inv(p, 10);
	printf("The array has been inverted:\n");
	for (p = arr; p<arr + 10; p++)
		printf("%4d", *p);
	printf("\n");
	return 0;
}

void inv(int *x, int n)
{ 
   
	int *p, m, temp, *i, *j;
	m = (n - 1) / 2;
	i = x;  j = x + n - 1;  p = x + m;
	for (; i <= p; i++, j--)
	{ 
   
		temp = *i; *i = *j; *j = temp;
	}
}

结果为:
在这里插入图片描述
方法四:

//⑷ 实参用指针变量,形参用数组
#include <stdio.h>
int main()
{ 
   
	void inv(int  x[], int n);
	int i, a[10], *p = a;
	for (i = 0; i<10; i++, p++)
		scanf_s("%d", p);
	p = a;
	inv(p, 10);
	printf("The array has been inverted:\n");
	for (p = a; p<a + 10; p++)
		printf("%4d", *p);
	printf("\n");
	return 0;
}

void inv(int  x[], int n)
{ 
   
	int t, i, j, m = (n - 1) / 2;
	for (i = 0; i <= m; i++)
	{ 
   
		j = n - 1 - i;
		t = x[i];  x[i] = x[j];  x[j] = t;
	}
}

结果同上。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【工程案例】3个学生各学4门课,计算总平均分,输出第n个学生成绩

#include <stdio.h>

void average(float  *p, int  n);
void search(float(*p)[4], int  n);

int main()
{ 
   
	float score[3][4] =
	{ 
    { 
    65, 67, 79, 60 }, { 
    80, 87, 90, 81 },
	{ 
    90, 99, 100, 98 } };
	average(*score, 12);
	search(score, 2);
	return 0;
}
void average(float *p, int n)
{ 
   
	float  *p_end, sum = 0, aver;
	p_end = p + n - 1;
	for (; p <= p_end; p++)
		sum = sum + (*p);
	aver = sum / n;
	printf("average=%5.2f\n", aver);
}
void search(float(*p)[4], int n)
{ 
   
	int i;
	printf("score of No.%d :\n", n);
	for (i = 0; i < 4; i++)
		printf("%5.2f ", *(*(p + n) + i));
	printf("\n");
}

结果可以自行测试。

总结:二维数组与一维数组指针变量的关系

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170990.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MYSQL中建议使用NOT NULL原因[通俗易懂]

    MYSQL中建议使用NOT NULL原因[通俗易懂]MySQL官网文档:NULLcolumnsrequireadditionalspaceintherowtorecordwhethertheirvaluesareNULL.ForMyISAMtables,eachNULLcolumntakesonebitextra,roundeduptothenearestbyte.Mysql难以…

    2022年6月6日
    36
  • 机器学习—决策树原理(python代码实现)

    机器学习—决策树原理(python代码实现)首先,决策树(DecisionTree)是一种基本的分类与回归方法,在这里主要讨论用于分类的决策树。决策树的学习通常包含三个步骤:特征选择,决策树的生成,决策树的剪枝。优点:计算复杂度不高,输出结果易于理解,对中间值的缺失值不敏感,可以处理不相关特征数据。 缺点:可能会产生过度匹配的问题。 使用数据类型:数值型和标称型。那么具体的来通过一个例子说明一下决策树。下面这个例子是通过贷款…

    2025年10月3日
    3
  • Java实现字符串逆序输出

    Java实现字符串逆序输出【题目描述】写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。【输入】一行字符【输出】逆序后的字符串【样例输入】123456abcdef【样例输出】fedcba654321 【解题思路】首先定义两个String字符串a,b,其中a用于存放正序的字符串,b用于存放逆序的字符串,然后在定义一个字符数组c,然后调用类库中的t…

    2022年7月16日
    19
  • 什么是静态代理和动态代理,两者的区别(笔记)「建议收藏」

    什么是静态代理和动态代理,两者的区别(笔记)「建议收藏」文章目录1.什么是代理?2.静态代理3.动态代理4.总结:1.什么是代理?​ 代理:就是让代理角色帮助真实角色完成一件事情;​ 举例:过年回家让朋友代买火车票,朋友帮你买火车票的过程就是代理2.静态代理​ 什么是静态代理:静态代理相当于是多写了一个代理类,在调用的时候调用的是代理类,在代理类中的处理还是原生的处理逻辑,不过在前后添加上需要添加的代码。缺点:需要为每一个被代理的对象都创建一个代理类。​ 特点:​ 代理角色和真实角色都需要实现同一个接口,​ 真实角色专注于自己的.

    2022年10月19日
    3
  • python 脚本实现查看文件内容

    python 脚本实现查看文件内容

    2022年4月2日
    61
  • 用new创建数组

    用new创建数组用new创建数组用new创建数组的优势由于new创建的对象是在运行时确立的,所以有着具体情况具体分析的优点,那么什么叫做具体情况具体分析呢?我觉得c++primerplus的一个例子十分贴切——比如你在度假,已经做好每天的参观计划,可突然有一天天气不好或你心情不好,此时你就不想参观了,如果此时是在编译状态,系统是不允许的,你必须按照计划去参观,但运行时状态,系统是允许的,此时你就可以呆在酒店尽情的玩耍了。用new创建数组也有此优点,即数组长度可以根据情况而定。比如说创建10个元素的数组,可以如下代

    2022年5月15日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号