[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

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

相关推荐
哆啦阿梦几秒前
Java AI 应用工程师 - 完整技能清单
java·开发语言·人工智能
VT LI1 分钟前
Lua 源码执行流程全解析:词法分析、语法分析、字节码生成、虚拟机执行与垃圾回收
java·开发语言·lua
凤山老林2 小时前
04-Java JDK, JRE和JVM
java·开发语言·jvm
小成202303202658 小时前
Linux高级02
linux·开发语言
钢琴上的汽车软件8 小时前
C 语言中const与指针:三种常见写法辨析
c语言·指针和const
知行合一。。。8 小时前
Python--04--数据容器(总结)
开发语言·python
咸鱼2.09 小时前
【java入门到放弃】需要背诵
java·开发语言
ZK_H9 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
A.A呐9 小时前
【C++第二十九章】IO流
开发语言·c++
椰猫子9 小时前
Java:异常(exception)
java·开发语言