[C错题本]

1.int,short,long都是signed的 但是char可能是signed 也可能是unsigned的------《C++ Primer》

2.在16位的PC中 char类型占1个字节 int占2个字节 long int占4个字节 float占四个字节 double占八个字节

3.自增运算符和自减运算符即使是在判断条件中使用也会实际生效

cpp 复制代码
int i = 1;
int j = i++;
if((i > j++) && (i++ == j)) i += j;

第一行:i=1

第二行:因为是后自增 因此先把1赋值给j 后i+1 所以此时i=2 j=1

第三行:i>j++翻译为2>1 这个正确 但是j++需要自增 所以变成了i=2j=2

第二个条件:i++ 所以i是原值参与运算 i=2 j=2相等 但是这个考虑完后i++ 所以此时i=3

因为或运算的两边都成立 真真为真 则if语句成立 因此i = i+j =5

前自增和后自增的差异要谨记

4.数组中指针的表示形式

cpp 复制代码
int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//一种表达形式
int a[3][3] = {{1,2,3},
               {4,5,6},
               {7,8,9}};

&a[2][1]取第三行第二列的元素的地址

*(a[2]+1)访问第三行第二列元素的地址

a[2]+1:运算的结果是"第三行第二列的值的地址->实际上是一个二维数组的地址

*(a+2)+1指的是第三行第二列的那个地址

备注一点: 在指针当中 *a 就是访问a这个指针变量指向地址的值 注意是值

在数组中,*(a)是访问a这个指针变量指向的地址 而不是值

这个地址就是这一行的地址

a: a:第一行的地址

java 复制代码
a: 0x7ffeefbff580
*a: 0x7ffeefbff580
**a: 1

a是整个二维数组的首地址

*a是取二维数组的第一个数组的地址 在值上和a相等 在值和意义上和a[0]相等

5.短路:

短路只会出现在逻辑运算符中 ||与&&

cpp 复制代码
int j=0;
int k=1;
if(j++&&k++){};//问执行后的j与k是多少
//答案是 j=1 k=0
//因为后自增 j先带入值进去为0 但是或需要两个为真 所以后边的k被短路了 自然不会增加
cpp 复制代码
int j=0;
int k=1;
if(k++||j++){};//问执行后的j与k是多少
//答案是 k=2 j=0
//因为后自增 k带入后k自增为2 因为逻辑或运算中出现了真值 所以后面的j被短路 j为0不变

6.琐碎的空指针问题

int *p=NULL;与 int *p=0与p='\0'是等价的

7.当数组在形参时的内存问题:

cpp 复制代码
void print_array(int arr[]) {
    int n = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
}
 
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    print_array(arr);
    return 0;
}

只会输出1和2 打印两次

因为数组放在形参的时候相当于一个指针 sizeof大小为8 一个int数大小为4

所以循环只会执行两次

8.~的取反操作

cpp 复制代码
#include <stdio.h>
int main() {
    unsigned char a = 235;
    unsigned char b = ~a;
    unsigned char c = b >> 1;
    printf("%d", c);
};

a的二进制是(1110 1011)2

对a进行取反->(0001 0100)2为b的值

b右移一位(0000 1010)2

化为十进制就是10 则答案是10

我们要记住~是对其二进制位取反的意思

相关推荐
ac-er8888几秒前
PHP弱类型安全问题
开发语言·安全·php
ac-er88881 分钟前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
爱吃喵的鲤鱼11 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
DARLING Zero two♡37 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Gu Gu Study39 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_1 小时前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑1 小时前
php 使用qrcode制作二维码图片
开发语言·php