c语言对指针,字符串的讲解一(小白小伙伴请点进来!!!)

作为一个被指针霍霍了很长时间的菜鸟博主,博主也深知各位萌新小伙伴在初面对指针时的懵逼,抓狂,自闭,到放弃。当然,这很正常,小伙伴们不必害怕是自己能能力不够。那么这期博客,博主会将这部分内容很清晰的讲解一遍,我们使用对于字符的指针,以及配合pta的不符恩习题去讲解。觉得博主讲的不错的,赏博主一个赞吧!😒

目录

指针

为保证学习的有效性呢,我们必须充分的理解指针的含义。
首先呢,指针顾名思义,就是指向某一个地方。那么在c语言中,数据是如何储存呢?我们都知道,一个东西的储存它必然是需要空间的,不论是水,火,亦是空气,都需要空间,只是需要空间的大小不同罢了。我们将这一点引入计算机中,同样如此,计算机就相当于一个世界,其中生存的生物包括,整形变量,浮点型变量,字符型变量…等等。他们的存在都是需要空间的,而这里的生存空间其实就是他们的家。每个存在的家门上都有一个门牌,这个门牌上写着这家的地址。而所谓指针其实就是这个门牌。我们如果要访问这个“存在”,也就是这个数据,就需要顺着地址去找到他,所以,很自然的引入到c语言中我们通过去访问数据的地址从而访问数据,而这些地址便被称之为指针。

指针的初次使用

这里我们有必要去清楚两个运算符号 * &
我们假设有两个变量:a,b。我们用这两个变量来进行讲解。
代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	char b;
	b='i';
	char *a=&b;
	printf("1. %c\n",b);
	printf("2. %d\n",&b);
	printf("3. %c\n",*a);
	return 0;
}

小伙伴们,可以现在自己电脑上跑一下这一段代码,看一下他的结果。(博主使用的是dev所以会与vs稍有不同),结果如下↓
在这里插入图片描述

  1. 这里的b就是我们要找的那个数据。
  2. & 这个符号,我们称它为取址符。就是取b数据所在的地址,也就相当于取b这个人的住址。
  3. 没错,又是i,小伙伴有没有意识到什么。我们的字符指针a相当于我们现在手里拿了一张路线图,而这个路线图的目的地就是b的地址。我们顺着指针a指向的地址去访问了b。而我们要知道路线图的目的地一定要是一个地址,因此,对指针变量一定要是地址
    例:
#include<stdio.h>
#include<stdlib.h>
int main()
{
	char *a='b';
	printf("%c",a);
	return 0;
}

我们这样编译运行,编译器就会报错。
在这里插入图片描述
那么如果到这里的小伙伴都可以理解的话,我们就继续看下面的,没有理清楚的小伙伴可以在品一下。
###

指针的初级使用


到了这块,博主会开始说的稍微跳跃一点了。我们从字符串,数组说起。
许多萌新小伙伴,在学习到这里的时候肯定已经接触过了数组。我们用一段简单的代码来讲解。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a[11]={0,1,2,3,4,5,6,7,8,9,10};
	printf("%d\n%d\n",&a,&a+1);
	printf("%d",a);
}

小伙伴们现在电脑前跑一下,我们可以得到这样的结果。

在这里插入图片描述

  1. 我们第一个输出是使用了取值符的,而第三个输出并没有使用取值符,却得到了一样的结果,这意味着,我们不论使用取址符还是不使用取址符,这里的a就是&a,而与第二个输出对比,我们很容易得到,其实第一个输出的便是这个数组的首地址,也就是说,这个数组a[10],里的a就是表示它的首地址,那么我们便可以通过指针去访问数据了。
  2. printf("%d",*(a+i));,这里的i便是这个每个数据的下标。
    如下:
    在这里插入图片描述
    字符串指针
    这是重中之重。这里有必要说一下,其实,所谓的字符串。
    在本质上与这个东西是一样的。
    在这里插入图片描述
    所以,如果我们命名一个char a[10]=“abcdefghij” 这样的字符串。那么这里的a就是它的首字母的地址。我们一样可以通过*去访问。
    在这里插入图片描述
    那么我们在一维字符数组,也就是字符串里,是很少用到指针的。这里我们又要引入二维数组。换句话说字符串数组。我们一般这样命名:
    在这里插入图片描述
    这里博主建议小伙伴换一种命名法,我们可以这样命名:
    在这里插入图片描述
    我们使用 * 号之后会比之前的命名法灵活许多因为我们不需要去专门设置每一个字符串的长度上限。这时候我们对整个指针的应用才是真的开始。我们这里比喻一下,
    这就是字符串:
    在这里插入图片描述
    而这,就是一堆字符串,美其名曰字符串数组:
    在这里插入图片描述
    (同理数字的整形二维数组与这一致),当我们以 char *a[]={“ksks”,“14”,“nb”} 这样命名一个字符串数组时,是这样的:
    在这里插入图片描述
    而这里的a其实就是第一行第一列元素的地址。
    在这里插入图片描述
    因此我们可以通过,*这个符号去访问他的所有数据。
#include<stdio.h>
#include<stdlib.h>
int main()
{
	char *a[]={"ksks","14","nb"};
	printf("%d\n",a);
	printf("第一行元素为%s\n",*(a+0));
	printf("第一行第一列元素为%c\n",*(*(a+0)));
	return 0;	
}

结果为:
在这里插入图片描述
我们可以通过调整数据去,读取每一个数据,或者通过循环结构去访问每一个数据。
在这里插入图片描述
同样的,整形亦或是浮点型的数组皆可这样理解。
好啦,今天的博客就到这里啦,要是有疑问的小伙伴可以私信博主。

博主会继续更新相关内容的,需要学习的小白朋友可以关注博主哦,晚安!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值