[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}};

&a21取第三行第二列的元素的地址

*(a2+1)访问第三行第二列元素的地址

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

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

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

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

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

a: a:第一行的地址

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

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

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

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

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

相关推荐
我可能是个假开发几秒前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
小师兄吃牛肉40 分钟前
C语言中的nullptr有必要吗
c语言·c++·算法
WL学习笔记1 小时前
日期类(C++)
开发语言·c++·日期类实现
谢亮_vipxieliang2 小时前
Go map与结构体的正确使用
开发语言·golang·哈希算法
H.莓飛2 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
lhbweilai2 小时前
深挖FreeRTOS内核实现(三)
c语言·stm32·单片机
xxwl5852 小时前
数据结构知识点和代码实现总结(C语言实现)
c语言·开发语言·数据结构
小灰灰搞电子4 小时前
C语言 <time.h> 头文件详解
c语言·time.h
C++ 老炮儿的技术栈5 小时前
sizeof操作符
c语言·c++·人工智能·mfc·c
wuminyu5 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++