嗨翻C语言——存储器和指针(2)

1、指针做了两件事:共享数据和避免副本。
2、在函数中声明变量通常会保存在栈中;在函数外声明的变量保存在全局量区。
3、为了找出变量的存储器地址,用&运算符。
4、%p用来格式化地址,使地址以16进制的格式输出。
5、指针变量是一个用来保存存储器地址的变量。声明指针变量时,需要说明指针所指向的地址中保存的数据类型。
6、和&相反,接收一个地址,告诉你地址中保存的是什么数据,&接收一个数据,告诉你保存这个数据的地址。
7、为什么存储器是进程的?
计算机会为每个进程分配一个简版存储器,看起来像是一长串字节。
8、指针是进程存储器中真实编号的地址。
9、sizeof字符串查询某样东西在存储器中占多少字节。
10、数组变量quote好比一个指针,会把它替换成字符串首字母的地址。
11、如果把函数参数声明为数组,他会被当做指针处理。
12、函数与运算符区别:编译器会把运算符编译为一串指令,而当程序调用函数时,会跳到一段独立的代码中执行。
13、把数组赋值给指针变量,指针变量只会包含数组的地址信息,而对数组的长度一无所知,相当于指针丢失了一些信息,我们把这种信息丢失称为退化。
14、表达式drinks[i]和
(drinks+i)是等价的。
15、索引:为了找到元素的地址单元,指针需要加上那个数字。本质是指针算数运算。
16、doses[3]==
(doses+3)==*(3+doses)==3[doses]
17、scanf()会导致缓冲区溢出,需要严格限制长度,否则会输出远超程序空间的数据,多余数据会存储在非法空间中。这种情况称为段错误或abort trap。
18、除了scanf还可以用fgets接收文本数据,
fgets(food,sizeof(food),stdin);
19、scanf适合应对结构化数据,fgets适合应对非结构化字符串。
20、如果想把指针设成字符串字面值,必须使用const关键字:
const char *s=“some string”;
21、如果想要修改字符串,需要在新的数组中创建副本。
22、只读变量在大多数操作系统中不能修改。
23、在同一个操作系统中,操作器段总是以相同的顺序出现。
24、scanf()表示scanformatted,用来扫描带格式的输入。
25、栈是存储器用来保存局部变量的部分。
26、堆用来动态存储。

嗨翻C语言--字符串(2.5)
1、string.h函数和它们的作用:
strchr() 在字符串中查找字符。
strcmp()比较字符串。
strstr()在字符串中查找字符。
strcpy()复制字符串。
strlen()返回字符串长度。
strcat()连接字符串。
2、在编程中,主函数应放在最后,因为编译器需要知道两件事:函数接收什么参数以及函数的返回类型是什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值