[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

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

相关推荐
LDR0067 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术7 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园7 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob7 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享7 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.7 天前
C语言--day30
c语言·开发语言
玖玥拾7 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
何以解忧,唯有..7 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽7 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下7 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php