C陷阱与缺陷笔记

这篇博客深入探讨了C语言中的指针、字符串和函数的使用。讲解了单引号和双引号的区别,指针与函数的关系,以及内存分配与释放。还提到了数组越界、条件语句的结构以及标准输入输出的处理。强调了避免悬挂else、防止数组越界和正确使用内存分配函数如malloc()和free()的重要性。
摘要由CSDN通过智能技术生成

单引号引起的一个字符对应的是该字符在编译器采用的字符集中的序列值。

双引号引起的字符串代表的是一个指向无名数组起始字符的指针,并且结尾是‘\0’。

float *g(), (*h)();

g是一个函数,该函数返回值得类型是指向浮点数的指针;

h是一个指针,该指针所指向的函数的返回值类型为浮点型。

赋值运算符的优先级要低于任何一个比较运算符

注意else悬挂问题

else始终与同一对括号内最近的未匹配的if结合。

*(a+i)是数组a中下标为i的元素的引用,简记为a[i]。

  *(*(a+i)+j)// 简记为a[i][j]

字符串常量代表了一块包括字符串中所有字符以及一个空字符(‘\0’)的内存区域的地址。

char *r, *malloc();
r = malloc(strlen(s)strlen(t)1);
if(!r){
 complain();
 exit(1);  

}
 strcpy(r,s);
 strcat(r,t);
 free(r);

复制指针并不同时复制指针所指向的数据。

当常数0被转换为指针使用时,这个指针绝对不能被解除引用。

if(p == (char *)0)...

正确

int i,a[10];
for(i=1;i<=10;i++)
a[i] = 0;

陷入死循环,由于内存中数组a之后的一个字实际上是分配给了整形变量i
计数器i的值设置为0。

INT_MAX是一个已定义常量,代表可能的最大整数值。

getchar()函数一般情况下返回的是标准输入文件的下一个字符

内存分配函数相关知识

malloc、realloc、free

调用malloc(n)将返回一个指针,指向一块新分配的可容纳n个字符的内存。
调用realloc(n)时,需把指向一块已分配的区域指针以及这块内存新的大小作为参数传入,可调整这块内存区域为新的大小,也有可能涉及到内存的拷贝。

尽可能在有歧义的地方,加括号。

注意数组越界的问题。

printf函数是把数据写道标准输出,fprintf函数可把数据写到任何文件中。

printf(stuff)
fprintf(stdout,stuff)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伽男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值