C语言之对 0, ‘0‘ , \0 以及 “0“ 的理解

刚开始学习c语言时对这块不是很了解,非常困惑,后来随着学习的深入,终于明白了其中的不同,希望以下文章能对你有所帮助。
0是个整型字符,类似于1,2,3这样的整型。单引号括起来的是字符常量,只能有一个字符,而双引号括起来的是字符串常量,可以有多个字符,所以 ‘0’ 是字符常量,c语言用ASCII码来进行存储,一个字符占用一个字节,由于定义的char类型,所以在char类型里写10进制0代表的就是\0, ‘0’ 在ASIIC码中对应的十进制数是48,依次类推 ‘1’ 对应的十进制数是49,他们也可以在程序中进行运算。在ASCII码表中的转义字符 \0 是字符串结束的标志,对应的十进制的数字就是0,最后 “0” 是字符串常量,例如:“Hello World”,“abc123”,都是字符串常量。
下面通过一个代码来理解 0‘\0’ 以及 ‘0’,先简单了解一个函数,

  • strcpy函数,char* strcpy(char * destination, const char * source );
  • 源字符串必须以\0结尾,会将源字符串中的\0拷贝到目标空间

这是未初识化时的arr1
在这里插入图片描述
初始化后
在这里插入图片描述
如果我们运行以下代码会报错,因为arr[]中没有 \0 的结束标志

int main()//会报错
{
	char arr[] = { 'd','e','f'};
	char arr1[10] = "abc";
	strcpy(arr1, arr);//将arr中的内容拷贝到arr1中
	printf("%s", arr1);
 	return 0;
}

但是当我们加上0或 ‘\0’ 后程序便会运行成功,加上’0’会报错,说明在某些特定的场合下,十进制数0和转义字符’\0’是一致的

int main()
{
	char arr[] = { 'd','e','f',0};//可将0替换为'\0'
	char arr1[10] = "abc";
	strcpy(arr1, arr);//将arr中的内容拷贝到arr1中
	printf("%s", arr1);//def
 	return 0;
}

在这里插入图片描述
以下是关于 ‘0’ 的代码

#include <stdio.h>
int main()
{
	char a = '0';
	char b = '1' - '0';
	char c = '0' - 8;
	char d = 'a' - '1';
	printf("%d\n", a);//48
	printf("%d\n", b);//1
	printf("%c\n", b);//一个图形
	printf("%d\n", c);//40
	printf("%c", d);//字符0
	return 0;
}

关于字符串的定义问题
字符串是以 \0 作为结束标志

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>


int main()
{
	char str1[5] = { 'a','b','c' };
	char str2[] = { 'a','b','c',0 };
	char str3[] = { 'a','b','c','\0' };
	char str4[] = "12345";

	printf("str1 = %s\n", str1);//abc
	printf("str2 = %s\n", str2);//abc
	printf("str3 = %s\n", str3);//abc
	printf("str3 = %s\n", str4);//12345

	return 0;
}   

在这里插入图片描述
这个代码意思是由于定义的char类型,所以在char类型里写10进制0代表的就是\0

  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,将这个矩阵转为灰度图像。由于每个像素的 RGB 值均为 0 或 7,因此我们可以直接使用其中任意一种值作为灰度值。这里我们使用 7。 转换后的灰度图像为: ``` 7 7 7 7 7 7 0 0 0 7 7 0 0 7 7 7 0 0 7 7 7 7 7 7 7 ``` 接下来,我们可以使用 Sobel 算子进行边缘检测。 Sobel 算子分别对图像的水平和竖直方向进行卷积,得到两个梯度图像。然后将这两个梯度图像合并,得到最终的边缘检测结果。 下面是 Sobel 算子的卷积核: ``` -1 0 1 -2 0 2 -1 0 1 ``` 对于每个像素,将其与卷积核中心重合的部分进行卷积。例如,对于中心像素(2,2),其对应的卷积结果为: ``` (1*(-1) + 0*0 + (-1)*1 + 0*(-2) + 0*0 + 0*2 + 1*(-1) + 0*0 + (-1)*1) = 0 ``` 因此,对于整个矩阵,其 Sobel 算子的水平方向卷积结果为: ``` 0 0 0 0 0 7 1 2 2 -7 7 0 0 0 0 7 0 0 0 0 0 0 0 0 0 ``` 竖直方向的卷积核为: ``` 1 2 1 0 0 0 -1 -2 -1 ``` 同样地,对于中心像素(2,2),其对应的卷积结果为: ``` (1*1 + 0*2 + (-1)*1 + 2*0 + 0*0 + (-2)*0 + 1*(-1) + 0*(-2) + (-1)*(-1)) = 0 ``` 因此,对于整个矩阵,其 Sobel 算子的竖直方向卷积结果为: ``` 0 7 7 7 0 0 1 0 0 0 0 2 0 0 0 0 2 0 0 0 0 -7 0 0 0 ``` 最后,将两个卷积结果分别取平方和再开根号得到最终结果: ``` 0 7.071 7.071 7.071 0 7.071 1.414 2 2 -7.071 7.071 2 0 0 0 7.071 2 0 0 0 0 -7.071 0 0 0 ``` 这就是对该矩阵进行 Sobel 边缘检测后得到的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值