我是靠谱客的博主 敏感小猫咪,最近开发中收集的这篇文章主要介绍C语言字符串、转义字符、操作符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

字符串、转义字符、操作符几个注意事项

1.字符串

字符串的结束标志:

求字符串的长度:使用strlen函数

在arr2数组中再加个’’字符,就能正确打印出abc

char arr1[] = "abc";
//内存存放形式:abc
char arr2[] = {'a','b','c'};	//内存存放形式:abc?????????
//打印字符串
printf("%sn",arr1);
//abc
printf("%sn",arr2);
//abc烫烫烫烫烫烫b
//求字符串长度
printf("%dn",strlen(arr1));
//3
printf("%dn",strlen(arr2));
//随机值

注︰字符串的结束标志是一个的转义字符。在计算字符串长度的时候是结束标志,不算作字符串内容。

2.转义字符

ddd ddd表示1~3个八进制的数字。如:130 X
xdd dd表示2个十六进制数字。如: 30 0

printf("%cn",'130');	//8进制的130是十进制的88,按%c的形式打印就是字符X
printf("%cn",'101');	//8进制的101是十进制的65,按%c的形式打印就是字符A
printf("%cn",'x30');	//16进制的30是十进制的48,按%c的形式打印就是字符0

‘130’ -> 1 * 82+3 * 81 = 88

‘101’ -> 1 * 82+1 * 80 = 65

‘x30’ -> 3 * 161 = 48

printf("%d n", strlen("c: test328test.c"));
//14

这个字符串的长度是14,因为t是一个字符,32是一个字符,因为八进制数中没有8,所以字符8不能算进转义字符里

注释有两种风格:

C语言风格的注释 /* xxxxxx */ 缺陷:不能嵌套注释

C++风格的注释 //xxxxxxxx 可以注释一行也可以注释多行

3.操作符

sizeof是一个操作符,不是函数

作用:计算类型或者变量的大小的

int main()
{
int a = 10;
printf("%d n", sizeof(int));	//可以直接求类型大小,结果为4
printf("%d n", sizeof(a));
//也可以求变量的大小,结果为4
return 0;
}

计算数组大小方法:

int main()
{
int arr[10] = {0};
printf("%dn",sizeof(arr));
//计算的是数组的总大小,单位是字节,结果为40
printf("%dn",sizeof(arr[0]));	//数组的第一个元素的大小,结果为4
int sz = sizeof(arr)/sizeof(arr[0]);	//数组中的字节大小除以一个元素的大小,就是数组元素的个数,结果为10
printf("%dn",sz);
return 0;
}

按位取反~

int main (){
{
int a = 0;
printf ( "%d n", ~a) ;
//结果是-1
}

解释:

因为a为0,所以其在32位系统下的二进制为:

00000 0000 0000 0000 0000 0000 0000 0000
~a:1111 1111 1111 1111 1111 1111 1111 1111

因为整数在内存中存储的是补码

所以,取反后a在内存中的存储是全1,而%d输出要转为原码,由补码->反码->原码,结果得到-1,所以负数在内存中存储和输出会经过二进制计算转化

1111 1111 1111 1111 1111 1111 1111 1111(补码)

​ ↓

1111 1111 1111 1111 1111 1111 1111 1110(反码)

​ ↓

1000 0000 0000 0000 0000 0000 0000 0001(原码)

所以结果输出为:-1

正整数:原码、反码、补码相同

负数:在内存中是以补码形式保存的,补码等于反码加一

逗号操作符

逗号表达式,是从左向右依次计算的

整个表达式的结果是最后一个表达式的结果

int main()
{
int a = 0;int b = 3;int c = 5;
int d = (a = b + 2,c = a - 4, b = c + 2);	// a=3+2=5,
c=5-4=1,	b=1+2=3
最终d = b = 3
printf ("%d n", d);
//结果是3
}

示例代码:

a = get_val();
count_val(a);
while (a > 0)
{
//业务处理
a = get_val();
count_val(a);
}

如果使用逗号表达式,改写后可减少冗余:

while (a = get_va1(),count_val(a), a>0)
{
//业务处理
}

下标引用操作符[ ]

访问数组下标时用的[ ]叫做下标引用操作符

printf ("%d n", arr[4] );	//[]的操作数是2个:arr , 4

小括号():函数调用操作符

如 fun(a,b)

操作数有三个,fun,a,b,有些函数没有参数,那就一个操作数,就是函数名

结构成员访问操作符 . ->

.

使用:

struct B
{
char name[10];
char id[10];
int price;
};
int main()
{
Struct B b;
printf("书名:%s n", b.name);
printf("书号:%s n", b.id);
printf("定价: %dn", b.price);
return 0;
}

->用于指针形式

struct B
{
char name[10];
char id[10];
int price;
};
int main()
{
struct Book b = { "c语言","C20210509",55};
struct Book * pb = &b;
printf("书名:%s n",(*pb).name);
printf("书号:%s n",(*pb) .id) ;
printf("定价:%d n", (*pb) .price);
//等价于下面写法,一般使用下面的写法,结构体指针->成员名
printf("书名:%s n",pb->name);
printf("书号:%s n",pb->id) ;
printf("定价:%d n", pb->price);
return 0;
}

最后

以上就是敏感小猫咪为你收集整理的C语言字符串、转义字符、操作符的全部内容,希望文章能够帮你解决C语言字符串、转义字符、操作符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部