当前位置: 首页 > news >正文

C 语言学习

  1. 数组的指针 

                    在c中,几乎所以使用数组名的表达式中,数组名的值是一个指针常量,也就是数组               第   一个元素的地址。注意这个值是指针常量,不是变量。 

           int  a[10]={   ….....}; 

           int    *q; 

           q=&a[0] ;   <=>  q=a;    //这两句是等价的。 

    

           但是,a=q   是非法的,因为a是常量。 

           a[5]=*(q+5)       //数组下标等价于数组的指针间接寻址。 

          int    a[10]={….....}; 

          int   *p=a;      //一定要理解,非常重要。 

          注意  int   *p    是定义的p为整型指针变量,如初始化必须是指针类型值。 

           如: 

           char   c='a'; 

           char    *q= &c; 

           特别要理解字符串常量这个特殊情况:

           char   *q="hello world.";          //"hello world" 的值为存储这个字符串常量的地址指针。

           到现在就可以很好理解scanf输入什麽时候加&符号了

            如:

            char   c[10];

            int    t;

            scanf("%d",&t);      //注意t前面必须加& 地址符号。

            scanf("%s",c);        //因为c就是指针类型。同样。printf("%s",a) a也是指针类型。

            c语言中,任何字符串常量的值的类型都是指针类型。

           所以,只有见到函数参数是  char  *  或者const   char  *   就是要输入字符串。

          如:c中打开文件的函数    

                   FILE  *  fopen(const   char   *restrict, const  char  *restrict)

                   此函数的意思就是函数返回值为FILE类型的存储指针,如打开成功,返回打开文件运行代码的内存地址指针,失败,返回NULL。  参数1为文件路径名加文件名,用字符串常量表示,如"/home/wjs/2.c",  参数2 为字符串常量,如" r" ,  "w","a","r+","w+","a+",表示读写方式。     

          c语言中规定:关于函数参数,在函数原型或函数定义的场合中(并且也只有在这两种场合中),可以用 int  *p 代替 int  p[ ]  

           fun( int  *p)         <==>   fun (int  p[ ])     等价

#include <stdio.h>
#include <string.h>
#define A "hello world."

int test(int *p);
int main(void){
    int t[10]={1,2,3,4,5,6};
        test(t);    
    return 0;
       

}
int test(int *p){
    printf("%d\n",p[3]);       //4
    printf("%d\n",*(p+3));     //4
    return 0;
}
 

2.       #define    A      B        把b自定义 A 

          如定义字符串:   #define    HELLO    "hello   world" 

           定义数值               #define     LEN       10 

3.       const     修饰,表示不可变 

          const    int   t[10]         不可变数组 

         const     int  t=10         不可变变量 

4.    c 语言的字符串就是以\0结尾的char数组。

       字符串常量或者叫字符串文字是指用一对双括号包围的任何字符,系统自动加\0.

          

        <1> c语言的字符串定义:

         先定义字符串 c :       char   c [ 20]={..........  ,'\0'};

         程序中可以直接用c  代表字符串了

        <2>  字符串常量的定义

           a:    #define    A    ”hello world."

           b:   char  c[20]="hello  world."

           c:   char  *p="hello  world"        //特别要理解,这里赋值是字符串常量的地址指针。可以参看下面的代码理解

          printf("%c\n", *"hello");    //   输出 h,"hello" 的值为字符串hello内存存储地址的指针。

  char *p="hello world.";
        for(int n=0;n<strlen(p);n++){
        printf("%c\n",*p);
        p++;
    }

     输出为  h   e  l    l  o   

scanf   输入时系统自动加如\0 空白符。printf  函数可以直接输出 字符串数组。如不加空白符,那是字符数组 .printf() 也能直接输出 字符数组。这和java  输出数组就有区别。

         char   c[20];

          scanf("%s",c);

          printf("%s\n",c);      //直接输出。

5     键盘输入:

        a.    char  c=getchar()    //一个字符的输入

        b.    char  c[20];     gets(c);         //一个字符串的输入,可以包括空格等,不推荐使用。

        c.    char c[20];  char  *p;   p=fgets(c,20,stdin);    //输入一个字符串,推荐用。

        d.   char c[20];    scanf("%s",c)    //可以输入字符串。整数。浮点数,字符等

6.    屏幕输出

      a.  putchar('a');             //输出一个字符

      b.  puts(&);          //& 表示输出字符串的地址指针

           如: puts("hello");

                    char   *p="hello";    puts(p+1); //ello

     c.  char c[20]="hello";   fputs(c,stdout);

     d.  printf(  )

========================================================

c  服务器与客户端 for deepin

服务器:

  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void error_handling(char *message);int main(int argc,char *argv[]){int serv_sock;int clnt_sock;struct sockaddr_in  serv_addr;struct sockaddr_in  clnt_addr;socklen_t   clnt_addr_size;char message[]="hello nanning";if(argc!=2){printf("Usage:%s <port>\n",argv[0]);exit(1);}serv_sock=socket(PF_INET,SOCK_STREAM,0);if(serv_sock==-1)error_handing("socket() error");memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);serv_addr.sin_port=htons(atoi(argv[1]));struct sockaddr *myaddr=&serv_addr;	if(bind(serv_sock,myaddr,sizeof(serv_addr))==-1)error_handing("bind() error|port binding");if(listen(serv_sock,5)==-1)error_handing("listen() error");printf("%s\n","listening port");clnt_addr_size=sizeof(clnt_addr);struct sockaddr *myclnt=&clnt_addr;clnt_sock=accept(serv_sock,myclnt,&clnt_addr_size);if(clnt_sock==-1)error_handing("accept() error");write(clnt_sock,message,sizeof(message));close(clnt_sock);close(serv_sock);return 0;
}
void error_handing(char *message){fputs(message,stderr);fputc('\n',stderr);exit(1);
}

客户端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void error_handing(char *message);int main(int argc,char *argv[]){int sock;struct sockaddr_in serv_addr;char message[30];int str_len;if(argc!=3){printf("Usage:%s <ip> <port>\n",argv[0]);exit(1);}sock=socket(PF_INET,SOCK_STREAM,0);if(sock==-1)error_handing("socket() error");memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_addr.s_addr=inet_addr(argv[1]);serv_addr.sin_port=htons(atoi(argv[2]));struct sockaddr *myaddr=&serv_addr;if(connect(sock,myaddr,sizeof(serv_addr))==-1)error_handing("connect() error");str_len=read(sock,message,sizeof(message)-1);if(str_len==-1)error_handing("read() error");printf("message from server:%s\n",message);close(sock);return 0;
}
void error_handing(char *message){fputs(message,stderr);fputc('\n',stderr);exit(1);
}

      服务器:./ s    3000

      客户端: ./c    127.0.0.1     3000

          

相关文章:

C 语言学习

数组的指针 在c中&#xff0c;几乎所以使用数组名的表达式中&#xff0c;数组名的值是一个指针常量&#xff0c;也就是数组 第 一个元素的地址。注意这个值是指针常量&#xff0c;不是变量。 int a[10]{ ….....}; int *q; q&a[0] ; <>…...

TCP网络连接异常情况的处理

在网络连接中&#xff0c;经常会出现一些意外情况&#xff0c;导致TCP连接不能正常工作&#xff0c;对于这些意外情况&#xff0c;TCP内部有自己的解决方法 一.进程崩溃 在网络通讯时可能会出现进程突然崩溃的情况&#xff0c;当进程崩溃后进程就没了&#xff0c;就会导致进程…...

单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.10语句

1 表达式语句 表达式语句由表达式加上分号“;”组成。其一般形式为&#xff1a; 表达式; 执行表达式语句就是计算表达式的值。例如 caa; 2 函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为&#xff1a; 函数名(实际参数表); 例如 printf(“Hello !”);…...

Windows 通过服务名称搜索软件启动路径启动软件

文章目录 Windows 通过服务名称搜索软件启动路径启动软件 Windows 通过服务名称搜索软件启动路径启动软件 注意&#xff1a;QQ管家和360安全&#xff0c;正常情况下使用 taskkill 无法停止&#xff0c;因为在安全设置中有个“自保护”&#xff0c;正常情况下会默认勾选上&#…...

如何更高效的写出更健全的代码,一篇文章教会你如何拥有一个良好的代码风格

前言&#xff1a;在平常的写代码的过程中&#xff0c;或多或少的遇到很多奇怪的 bug &#xff0c;尤其是一些大的程序&#xff0c;明明上一部分都是好好的&#xff0c;写下一块的时候突然多几百个 bug 的情况&#xff0c;然后这一块写完了后编译的时候直接傻眼了&#xff0c;看…...

Java如何调用接口API并返回数据(两种方法)

Java如何调用接口API并返回数据&#xff08;两种方法&#xff09; java处理请求接口后返回的json数据-直接处理json字符串 处理思路&#xff1a; 将返回的数据接收到一个String对象中&#xff08;有时候需要自己选择性的取舍接收&#xff09; 再将string转换为JSONObject对象 …...

极狐GitLab 价值流管理之「总时间图」使用指南

本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Haim Snir 译者&#xff1a;极狐(GitLab) 市场部内容团队 对于软件研发管理者来说&#xff0c;了解在整个研发过程中时间都耗费在了哪些地方&#xff0c;是进行交付价值优化的关键洞察。GitLab / 极狐GitLab 新的价值流分…...

Mybatis入门和环境搭建

文章目录 一. Mybatis的简介1. 什么是ORM?2. 什么是持久层&#xff1f;3. Mybatis的作用 二. Mybatis环境搭建1. 搭建一个数据库2. 创建maven项目并导入相关依赖3. Mybatis相关插件安装4. Mybatis.cfg.xml核心配置文件 三. 基于ssm逆向工程的使用1. 配置generatorConfig.xml2.…...

React 全栈体系(二)

第二章 React面向组件编程 一、基本理解和使用 1. 使用React开发者工具调试 2. 效果 2.1 函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>1_函数式组件</title> </head> &l…...

【Linux】socket编程(二)

目录 前言 TCP通信流程 TCP通信的代码实现 tcp_server.hpp编写 tcp_server.cc服务端的编写 tcp_client.cc客户端的编写 整体代码 前言 上一章我们主要讲解了UDP之间的通信&#xff0c;本章我们将来讲述如何使用TCP来进行网络间通信&#xff0c;主要是使用socket API进…...

七大出海赛道解读,亚马逊云科技为行业客户量身打造解决方案

伴随全球化带来的新机遇和国内市场的进一步趋于饱和&#xff0c;近几年&#xff0c;中国企业出海快速升温&#xff0c;成为了新的创业风口和企业的第二增长曲线。从范围上看&#xff0c;出海市场由近及远&#xff0c;逐步扩张。从传统的东南亚市场&#xff0c;到成熟的北美、欧…...

【Maven教程】(三)基础使用篇:入门使用指南——POM编写、业务代码、测试代码、打包与运行、使用Archetype生成项目骨架~

Maven基础使用篇 1️⃣ 编写 POM2️⃣ 编写业务代码3️⃣ 编写测试代码4️⃣ 打包和运行5️⃣ 使用 Archetype生成项目骨架 1️⃣ 编写 POM 到目前为止&#xff0c;已经大概了解并安装好了Maven环境, 现在&#xff0c;我们开始创建一个最简单的 Hello World 项目。如果你是初次…...

Spring Boot + Spring Data JPA 实现数据库操作的标准示例

环境搭建 本篇使用H2内存数据库演示Spring Data JPA 的使用。 导入JPA和H2的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><…...

JVM——类加载器

回顾一下类加载过程 类加载过程&#xff1a;加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 一个非数组类的加载阶段&#xff08;加载阶段获取类的二进制字节流的动作&#xff09;是可控性最强的阶段&#xff0c;这一步我们可以去完成还可以自定义…...

async/await 编程理解

博客主要是参考 Asynchronous Programming in Rust &#xff0c;会结合简单的例子&#xff0c;对 async 和 await 做比较系统的理解&#xff0c;如何使用 async 和 await 是本节的重点。 async 和 await 主要用来写异步代码&#xff0c;async 声明的代码块实现了 Future 特性&a…...

1. Java基础知识介绍

文章目录 1. Java基础知识介绍1. 简单输入输出1.1 输入1.2 输出 2. 数据类型2.1 基本数据类型2.2 引用数据类型 3. 函数4. 类基础知识5. 小结 1. Java基础知识介绍 1. 简单输入输出 在Java编程中&#xff0c;我们经常需要与用户进行交互&#xff0c;以获取输入并输出结果。Ja…...

基础shell小技巧01

1. 命令替换 shell脚本中最有用的特性之一是可以从命令输出中提取信息并将其赋给变量。把输出赋给变量之后&#xff0c;就可以随意在脚本中使用了。在脚本中处理数据时&#xff0c;这个特性显得尤为方便。 有两种方法可以将命令输出赋给变量。 反引号&#xff08;&#xff0…...

微信小程序--data的赋值与取值的几种方式

通过小程序官方文档可知&#xff1a; 赋值一定需要注意。需要setData的使用&#xff0c;这样页面才刷新&#xff0c;数据才会改变&#xff0c;并且分清that和this的使用 Page() 函数用来注册一个页面。接受一个 object 参数&#xff0c;其指定页面的初始数据、生命周期函数、事…...

条码通讯配置

由Leuze&#xff08;劳易测&#xff09; LSIS 222 M5M-R1/MA208i系统组成 连接说明及器件明细&#xff1a; 打开条码调试软件BPS Configuration tool对M208i进行ip 和端口号进行配置&#xff0c;条码选择作为客户端&#xff0c;输入ip和端口号&#xff0c;选择串口通讯波特…...

知网G4期刊《高考》简介及投稿要求

知网G4期刊《高考》简介及投稿要求 一、《高考》期刊简介&#xff1a; 主管单位&#xff1a;长春市委宣传部 主办单位&#xff1a;长春出版社 国内刊号22-1372/G4 国际刊号1673-6265 代号12-240 编辑单位&#xff1a;《高考》杂志社 出版周期&#xff1a;旬刊 类 …...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...