首页 > 其他分享 >2024.7.23 c语言学习笔记

2024.7.23 c语言学习笔记

时间:2024-07-23 23:30:16浏览次数:13  
标签:10 0000 2024.7 int 23 笔记 printf include 指针

复习:

  1. 什么是指针?

   也叫地址address,就是内存块的首位置,英文名叫painter。他是一个常量,指针不能被赋值,不能自增自减,例如:数组名就是内存块首地址,他就是一个指针常量。Int a=10,&a就是首地址,是指针常量;

  1. 什么是指针变量?

顾名思义,存放指针(地址)数据的变量,也叫地址变量。就是保存内存块首地址的数据的,例:int * p,p存放保存int型内存块的地址。

指针变量的初始化

指针变量与其它变量一样,在定义时可以赋值,即初始化。也可以赋值“NULL”或“0”,如果赋值“0”,此时的“0”含义并不是数字“0”,而是 NULL 的字符码值。

指针与整数的加减运算

(1)指针变量的自增自减运算。指针加 1 或减 1 运算,表示指针向前或向后移动一个单元(不同类型的指针,单元长度不同)。这个在数组中非常常用。

(2)指针变量加上或减去一个整形数。和第一条类似,具体加几就是向前移动几个单元,减几就是向后移动几个单元。

注意:2.1未经初始化的指针变量禁止使用。例:

     #include <stdio.h>
int main(){
    int a = 0;
    int * p = &a;
    scanf("%d",p);
    printf("d",*p);
    return 0;
}

   

2.2把谁的地址赋值给指针变量,指针变量保存了谁的地址,我们就说指针变量指向了谁。例:

#include <stdio.h>
int main(){
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int * p = a;
    printf("%d\n",*p);
    p = &a[2];
    printf("%d\n",*p);
    p = a+5;
    printf("%d\n",*p);
    return 0;
}

2.3在32位系统下,所有指针变量都是4个字节;

             64位系统下,所有指针变量都是8个字节;

  1. *p的含义:

     点找块(根据p代表的地址值,找对应类型的内存块)

注意:

    1.  p为null,*p会崩溃
    2.  p为乱值,*p会崩溃

2.p+n(地址值+整型数 )

     表示p代表的地址向偏移n个存储单元得到的地址值。

     在连续空间中,两个地址相减等于间隔内存单元的个数。

#include <stdio.h>
int main(){
    short int a[10] = {1,2,3,4,5,6,7,8,9,10};
    short int * p = a+5;
    printf("%d\n",p - a);
    printf("%d\n",(char*)p-(char*)a);
    return 0;
}

  1.  P[n]的含义:

     表示p代表的地址第n个内存块

#include <stdio.h>
int main(){
    int a[10] = {1,2,3,4,5};
   int * p = a;
   p[2]=100;
   *(p+3)=50;
    printf("%d\n",a[2]);
    printf("%d\n",a[3]);
    return 0;
}

  1. 支持的运算:

     6.1算术运算符:

     

+

两个地址相加无意义,地址+-整型数有意义

-

两个地址相减有意义,表示间隔内存单元个数

*

无意义

/

%

     6.2自增自减:

指针常量例如数组名,不能自增自减,指针变量可以自增自减

#include <stdio.h>
int main(){
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int * p = a;
    *(p++);
    (*p)++;
    *(p++);
    (*p)++;
    for(int i=0;i<10;i++){
        printf("%d",a[i]);
    }
    return 0;
}

6.3强制类型转换:支持

6.4关系运算:     支持

6.5 逻辑运算:&& ||   支持p为null为假,非空为真

6.6三目运算:    支持

6.7赋值:      支持

6.8逗号:      支持

6.9位运算:    不支持

&

|

 ^

<<

 >>

 ~

【】

*

&

8

10

9

5

5

2

2

2

2

这个对应比特位运算

&:位与,两个为1则为1,其他为0;

| :位或,只要有1,则为1,否则为0;

^ :异或,相同为0,不同为1;

<< :左移,左移n位,等于原数乘以2的n次方;

>>:右移,,右移n位,等于原数除以2的n次方;

~ :按位取反

6.10 sizeof:    支持 8/4

6.11 【】:     支持

6.12  *和& :  支持

应用场景

(1)判断一个数是不是2的n次方

#include <stdio.h>

int main(){

    int a = 0;

    scanf("%d",&a);

    if ((a&(a-1) )== 0){//必须加括号,否则优先级不对

        printf("是");

    }else{

        printf("不是");

    }

}

例如a=8

a   0100

a-1 0011

&  0000 0

(2)用你所知道的最快的算法,计算一个无符号整型数中有多少个1

1145

a:     0000 0100 0111 1001

a – 1 : 0000 0100 0111 1000

&:    0000 0100 0111 1000

a:    0000 0100 0111 1000

a-1:  0000 0100 0111 0111

&:    0000 0100 0111 0000

a:    0000 0100 0111 0000

a-1:  0000 0100 0110 1111

&:    0000 0100 0110 0000

#include <stdio.h>
int main(){
    int c = 0;
    int n = 0;
    scanf("%d",&n);
    while(n){
      n &= (n-1);
      ++c;
    }
    printf("%d",c);
    return 0;
}

(3) 把一个无符号整型数第七第八位置1,其他位不变。

#include <stdio.h>

int main(){

    unsigned int a = 0XFF000000;

    a |= (3<<7);

    printf("%#x",a);

    return 0;

}

(4)把一个无符号整型数第七第八位置0,其他位不变。

#include <stdio.h>

int main(){

    unsigned int a = ;//

    a = a & ~ (3<<7);



    printf("%#u",a);

    return 0;

}

(5)把一个无符号第七八九十位取出,并用%x输出

1145

a:     0000 0100 0111 1001

#include <stdio.h>

int main(){

    unsigned int a = 0;

    scanf("%u",&a);

    printf("%#x",(a>>7)&0xf);

}

//用指针法实现:输入10个数,找最大值

#include <stdio.h>

int main(){

    int a[10]={0};

    int * p = a;

    for(p = a;p<a+10;p++){

        scanf("%d",p);

    }int max = * p;

    for(p=a+1;p<a+10;p++){

        max = max < * p ? * p : max;

    }

    printf("%d",max);

    return 0;

}

//用下标法实现:输入10个数,找最大值

#include <stdio.h>

int main(){

    int a[10]={0};

    for(int i = 0;i<10;i++){

        scanf("%d",&a[i]);

    }int max = a[0] ;

    for(int i = 0;i<10;i++){

        max = max < a[i]  ? a[i]  : max;

    }

    printf("%d",max);

    return 0;

}

//两个整数之间的汉明距离
 

#include <stdio.h>
int main(){
    int x = 0;
    int y = 0;
    int c = 0;
    int n = 0;
    scanf("%d,%d",&x,&y);
    n = x^y;
    while(n){
        n &=(n-1);
        ++c;

    }

    printf("%d",c);
    return 0;
}

6.10 sizeof:    支持 8/4

6.11 【】:     支持

6.12  *和& :  支持

  

标签:10,0000,2024.7,int,23,笔记,printf,include,指针
From: https://blog.csdn.net/qq_54937403/article/details/140647687

相关文章

  • 《STL源码剖析》---迭代器章节读书笔记
    迭代器(Iterator)STL的核心思想是:将数据容器和算法分开,彼此独立设计,最后再用一贴胶着剂将它们撮合在一起。以find()​算法为例:template<classInputIterator,classT>InputIteratorfind( InputIteratorfirst, InputIteratorlast, constT&value);{ while(first!=la......
  • 2024.7.22每日笔记,有错望指出
    //5、求125之内自然数中偶数之和。#include<stdio.h>intmain(){inti=0;intsum=0;for(i=0;i<=125;i++){if(i%2==0){sum=sum+i;printf("%d\n",sum);}}return0;}//7、编程计算1......
  • 笔记——PHY芯片(以太网)设计
    1、以太网接口1.1PHY芯片的作用     实现并行以太网数据到符合以太网物理层链路数据传输格式的电平信号之间的转换。详细的说:        RJ45接口上的电信号为高速串行信号,数据是通过串行方式发送的,千兆以太网的位速率为1.25Gbps、百兆以太网的位速率为1......
  • 笔记1——LDO(低压差线性稳压器)
    1、LDO结构(三极管构成的,现在市面上都是PMOS) 2、LDO特性参数        (1)输入电压        (2)输出电压        (3)最大输出电流        (4)输入/输出电压差(Dropout)        一般情况下,负载电流越大,压差越大。        (5)功耗 ......
  • 20240723(30.2)AH股行情总结:创业板收跌3%,消费股、有色、黑色系齐跌,高股息资产及国债上涨
    半导体产业链全线回调,光刻机、GPU方向领跌,白酒领跌消费股。银行股逆势走强,四大行股价再创新高。黑色系及有色金属齐跌,沪锡跌4%,铁矿石跌超3%。周二,A股低开低走,午后跌幅加剧上证指数收跌1.6%,深成指跌近3%,创业板跌3%,两市成交额超6600亿,下跌股票数量超4600只。半导体产业链大幅走......
  • 黑马pink JavaScript学习笔记_Web APIs Day2
    事件监听(绑定)什么是事件?事件是系统内发生的动作或者发生的事情。比如:用户点击页面上的一个按钮。什么是事件监听?就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为注册事件比如:鼠标经过的时候,弹出一个alert“鼠标经过了~”语法元素对象.addEven......
  • springboot学习笔记 1 - Spring Boot 简介
    SpringBoot学习笔记什么是SpringBootSpringBoot的特点SpringBoot与Spring的区别开发环境要求使用SpringInitializr创建项目构建并运行第一个SpringBoot应用代码示例总结什么是SpringBoot大家好,欢迎来到“SpringBoot学习笔记”系列。首先,让我们从一个简单......
  • 7.23 如何上传库--打包操作
    1.创建包    要创建一个文件夹,再在文件夹里创建Python一个软件包。2.文件里会自带一个‘ _init_.py' ,然后再创建一个‘.py’文件,我们给他命名为‘demo.py’,然后在‘demo.py’里面添加如下代码:fromsetuptoolsimportsetupsetup(name="my_pa......
  • 日常训练日记——7.23
    Atcoder训练FlippingSigns思维通过打表观察发现,当负数为偶数时可以全部转化为正,不为偶数时,会留下一个负数,我们取绝对值最小的即可。#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;llcd[1000010];intmain(){ lln; llsum=0; llmi=2e18......
  • 7.23第二周周二学习总结
    基础算法复习(上午)双指针一本书P页,第i页有知识点ai,同一个知识点可能多次提到,希望通过连续的一些页把所有知识点都覆盖到。求出连续的最少页数#include<iostream>#include<algorithm>#include<cmath>#include<set>#include<map>#include<cstdio>#defineINF0x3f3f3......