C语言指针的初步了解

🌞欢迎来到C语言的世界 
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于锻体阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2021年11月14日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

0️⃣指针变量的定义与初始化

         1️⃣指针变量的引用

2️⃣指针变量的运算

3️⃣指针变量与一维字符数组

4️⃣指针变量与二维数组


 

0️⃣✨✨✨指针变量的定义与初始化✨✨✨

#include <stdio.h>
int main(void)
{
int i=3;
int *p=&i;
printf("%ld ,%ld\n", &i,p);  //输出变量i的地址值和p的值。
return 0;
}

        


1️⃣✨✨✨指针变量的引用✨✨✨

#include <stdio.h>
int main(void)
{
float *pointer=0,a=100,b=0;
printf("last= %f %f\n", a,b);
pointer=&a;  //把变量a的地址赋给指针变量pointer
*pointer=50.0f;    //把50.0f赋给pointer指向的空间
b=*pointer;        //从pointer指向的空间中取值,然后赋给变量b
printf("last= %f %f\n", a,b);
return 0;
}

有两个float型数据a,b,通过指针的方式把它们互换。

#include <stdio.h>
int main(void)
{
float a=4.3,b=6.5,temp=0,*p1=0,*p2=0;
p1=&a;     //两个地址指向的数据类型一致,可以赋值。
p2=&b;
temp=*p1;  //把p1指向的变量值赋给temp。
*p1=*p2;   //把p2指向的变量值赋给p1指向的变量。
*p2=temp;  //把temp赋给p2指向的变量。
printf("a=%2.1f,b=%2.1f \n",a,b);
return 0;
}


利用指针变量,用scanf函数输入变量的值。

#include<stdio.h>
int main(void)
{
	int a,*p;
    p=&a;          //把a的地址赋给指针变量p。
    scanf("%d",p);   //把键盘输入值放到p所指向的空间。
    printf("%d\n",a);  //这里输出数据就是输入时的数据。
    return 0;
}


2️⃣✨✨✨指针变量的运算✨✨✨ 

#include<stdio.h>
int main(void)
{
int *p,a=5;
p=&a;             //p的值赋成&a,p指向变量a。
printf("p=%ld\n",p);  //输出当前p的值。
p=p+1;     
printf("p=%ld\n",p);
return 0;
}


这里的p=p+1;执行后,p的值加一个p指向数据类型占用的字节数。因为这里p指向一个int型数据,一个int型数据在本次使用的编译器中占4个字节,所以+1时一次就加了4。

指针变量也是一个变量,所以编译系统也为它分配一个内存空间,大小一般为4或8个字节。与一般变量一样,它也有地址值,用取地址符&也可得到它的地址。

给定一个一维数组a,利用指针变量,输出a中各元素值的和。

#include<stdio.h>
int main(void)
{
	int a[5]={1,2,3,4,5}; //a存放的是第0个元素所在空间的首地址
	int *p=a;
	int i,sum;
	for(i=0;i<5;i++)
	    sum=sum+*(p+i);
	printf("a[1]=%d\n",a[1]);
	printf("sum=%d",sum);
    return 0;
}

数组名的本质是一个地址:

输出结果:

a[1]=2
sum=16

     a[1]=2的本质是,计算机根据a的值9000,从9000向后移动1个int类型所占的字节数,获得此地址空间的值。

     

      a[1][1]=5的本质是,计算机根据a的值9000,从9000向后移动1个int[3]类型所占的字节数,获得此地址就相当于一个新的一维数组名。

#include <stdio.h>
int main(void)
{
    int a[2][3]={{1,2,3},{4,5,6}};
	return 0;
}

 

3️⃣✨✨✨指针变量与一维字符数组✨✨✨

一个由小写英文字母组成的字符串存放在了一个维字符数组str中,用循环把每个小写字母改成大写,最后输出修改后的字符串

#include <stdio.h>
int main(void)
{
char str[10]="abcdef";
char *ch=str;   //定义一个指向char型的指针变量ch,初始化为
//字符数组的第0个字符地址。
for(;*ch!='\0';ch++)  //ch++后ch的值变化,ch指向下一个字符。
{
	printf("%c",*ch);  //*ch获取内存地址为ch处的数据。
   *ch=*ch-32;      //把*ch的值改成大写字母后赋给*ch。
}
printf("\n%s\n",str);
return 0;
}

GIF动态图片


4️⃣✨✨✨指针变量与二维数组✨✨✨

 C语言标准规定,类型和元素个数不同的一维数组属于不同的数据类型。如图int a[2][3]={{1,2,3},{4,5,6}};此时a的值是首元素的地址,它指向的数据类型是具有3个int型的一维数组,标准数据类型写法是int[3]。

(1)a作为指针,它指向的数据类型是一维数组。

(2)a+i作为指针,它指向二维数组的第i行这个一维数组,因为a指向的数据类型是一行,所以加i,就是指向第i行。

(3)*(a+i) 是第i行这个一维数组,一维数组以其数组名表示,因此,可以把*(a+i)看成是第i行这个一维数组的数组名。所以它的值也是一个指针值,指向第i行这个一维数组的第0个元素,指向的类型是该一维数组中元素的类型。

(4)a与*a的值虽一样,但作为指针值,前者指向第0行,后者指向第0行的第0个变量,指向的数据类型不同。因此a+i与*a+i的结果是完全不同的。前者因为a指向的数据类型是一行,所以a+i是指向第i行,后者因为*a指向的是第0行的第0个数据,因此,*a+i指向第0行的第i个数据。(a表示数组第 0行的地址, 而*a即为a[0], 它是数组名, 当然还是地址, 它就是数组第0 行第0列元素的地址。)

基本介绍

#include <stdio.h>
int main(void)
{
    int a[2][3]={{1,2,3},{4,5,6}};
	printf("a指向第0行  %ld\n",a);
	printf("a+1指向第1行  %ld\n",a+1);
	printf("*a指向第0行第0个变量  %ld\n",*a);
	printf("*a指向第0行第0个变量的值是:  %d\n",*(*a));
	printf("*a+1指向第0行第1个变量  %ld\n",*a+1);
	printf("*a+1指向第0行第1个变量的值是:  %d\n",*(*a+1));
	printf("*(a+1)指向第1行第0个变量  %ld\n",*(a+1));
	printf("*(a+1)指向第1行第0个变量的值是:  %d\n",*(*(a+1)));
	printf("\n");
	return 0;
}

写一个程序,用指针把一个二维数组中的变量值全部输出出来。 

#include <stdio.h>
int main(void)
{
    int a[2][3]={{1,2,3},{4,5,6}};
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<3;j++)    //输出一行的数据。
			printf("%d  ",*(*(a+i)+j));
		printf("\n");
	}
	return 0;
}

  • 96
    点赞
  • 444
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
C语言是一种广泛应用于软件开发和系统编程的编程语言。对于初学者来说,掌握C语言的入门知识是非常重要的。要正确理解和应用C语言,需要学习以下几个方面的知识: 首先是基本语法和数据类型。学习C语言初步阶段,你需要了解基本的语法规则,例如变量和常量的定义、表达式和语句的构成,以及各种数据类型的使用。掌握这些知识将有助于你编写简单的代码和程序。 其次是控制结构和函数。C语言提供了丰富的控制结构,例如条件语句、循环语句和跳转语句,这些控制结构可以帮助你控制程序的执行流程。同时,学习函数的概念和用法也非常重要,它可以让你更好地组织和重用代码。 另外,指针和数组也是C语言的重要组成部分。理解指针的概念和使用方法可以让你更灵活地操作内存,而数组可以用来存储和处理一系列相关的数据。对于C语言的进阶学习来说,深入理解和应用指针和数组是必不可少的。 最后,了解C语言的标准库函数以及如何使用它们也非常重要。标准库函数提供了丰富的功能和方法,例如输入输出、字符串处理、数学计算等等。熟练地使用这些函数将大大提高你的编程效率和程序的性能。 总之,C语言是一门重要且强大的编程语言,学习C语言的入门知识对于初学者来说是至关重要的。通过学习基本语法和数据类型、控制结构和函数、指针和数组以及标准库函数的使用,你将能够掌握C语言的编程技巧和方法,从而提高自己的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卿云阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值