学习c的第二天(指针,关键字)

发布于:2023-01-31 ⋅ 阅读:(595) ⋅ 点赞:(0)

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <string>
指针,是一个变量,是用来存储地址的。未来我们可以通过这个指针找到这个地址所存储的值,并对其引用或者修改
int main() {
    int x = 10;//创建一个变量,将变量赋值成10,并将其放入向内存申请的一个空间中。
    int* p = &x;//创建一个int*类型的变量p,并将x的地址记录在变量p向内存申请的一个空间中
    *p = 20;//将20这个值赋给p所储存地址所对应的变量,即x。 //p-指针名称,*p-指针类型 
    printf("%d\n", x);
    printf("%d\n", sizeof(p));
    return 0;
}
int*为变量p的类型,p称为指针变量
* ->为解引用操作符

指针的大小在32位平台上是4个字节,在64位平台上是8个字节。

可用#define用来定义标识符常量 
eg:#define MAX 10
#define 还可用来定义函数
#define MAX(X,Y){X>Y?X:Y}//与函数表达形式等价

int max(int x, int y) {
    
    if (x > y)
        return x;
    else
        return y;
}
int main() {
    int a = 10;
    int b = 20;
    int sum1 = 0;
    int sum2 = 0;
    sum1= max(a, b);
    sum2 = MAX(a, b);
    printf("%d\n", sum1);
    printf("%d\n", sum2);
    return 0;
}

extern int add(int, int);
int main() {
    int x = 10;
    int y = 20;
    int sum = 0;
    sum = add(x, y);
    printf("%d\n", sum);
    return 0;
}
关键字:
typedef-类型定义-类型重定义
unsigned-无符号-即数无正负之分
static 1、修饰局部变量,使局部变量生命周期延长
       2、修饰全局变量时,改变变量作用域,使静态的全局变量只能在自己所在的源文件内使用。
       3、修饰函数时,改变了函数的链接属性,使得动态的链接不能被其他系统识别到。
          即,使外部链接属性变成了内部链接属性

static int a;//加了static后a变成了一个静态的局部变量,函数调用完后,a不会被销毁。本质上是改变了局部变量的生命周期,但其作用域还是局部的。详细点说,就是有时我们希望函数中局部变量的值在函数调用结束后不销毁而继续保留原值,即希望其占用的存储单元不释放。在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值)。
extern->用于声明外部符号,函数等

#include<stdio.h>
int fun(int a)
{
    int b = 0;
    static int c = 3;
    b = b + 1;
    c = c + 1;
    return (a + b + c);
}
int main()
{
    int a = 2, i;
    for (i = 0; i < 3; i++)
        printf("%d\n", fun(a));
    return 0;
}
//输出结果为7,8,9


int Add(int a, int b) {
    int z = 0;
    z = a + b;
    return z;
}
int main() {
    int x = 10;
    int y = 20;
    int sum = 0;
    sum =Add( x,y);//()->为函数调用操作符
    printf("%d", sum);
    return 0;
}

int main() {
    int x = 10;
    int y = 20;
    int max = 0;
    /*if (x > y)     
        max = x;
    else
        max = y;*/
    max = (x > y ?  x :  y);//此行代码完美替代了上面四行代码,实现了写代码的简便性。
    printf("%d\n", max);
    return 0;
}

int main() {
    int x = (int)3.14;//(类型)—>强制类型转换   一般不建议使用
    return 0;
}

int main() {
    int a = 10;
    int b = a++;//后置++,先将a赋给b,再将a+1
    //int c = ++a;//前置++,先将a+1,再将值赋给b
    printf("%d\n%d\n",a, b);

    return 0;
}

EOF->end of file ->文件结束标志  值:-1
int main() {
    int x = 0;
    //~:按位取反—>二进制位0变1,1变0
    int y = ~x;
    printf("%d", y);//结果为-1
    //分析:引入概念:原码,反码,补码。
    //负数在存储的过程中存的是二进制的补码。
    //printf打印出来的是二进制的原码。
    //int->4个字节—>32个bit位。
    //0转换为二进制并取反后得
    //11111111111111111111111111111111—>首位为符号位,符号位不变。1代表负号,0代表正号
    //由于开头为1,因此判定为补码,对其进行转换成原码
    //转换步骤为:-1再取反,首位不变,结果为:10000000000000000000000000000001转化为十进制为-1

    return 0;
}
c语言规定,凡是整数,内存中存储的都是二进制的反码
正数——原码,反码,补码  三码相同
原码:直接按照正负写出二进制序列
原码—>反码:原码符号位不变,其他位按位取反得到
反码—>补码:反码+1

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到