`
ileson
  • 浏览: 215413 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

C从头开始

阅读更多
引用
0、关于main函数需要注意两点:
0.1、[K&R]书上的main函数定义写成main(){...}形式,不写返回值类型也不写参数列表,这是Old Style C的风格。Old Style C规定不写返回值类型就表示返回int型,不写参数列表就表示参数类型和个数没有明确指出。这种宽松的规定会导致很多复杂的Bug产生,不幸的是现在的C标准为了兼容旧的代码仍然保留了这种语法,但是读者绝不应该继续使用这种语法。
0.2、其实系统在调用main函数时是传参数的,所以main函数最标准的形式应该是int main(int argc, char *argv[])。C标准也规定了int main(void)这种形式,如果不使用系统传进来的两个参数也可以写成这种形式。但除了这两种形式之外,以其它形式定义main函数都是错误的或不可移植的。

C变量
http://lavasoft.blog.51cto.com/62575/186951
1、变量存在哪里?
    ①栈区(Stack):用于存放局部变量(包括方法的参数等)
    ②堆区(Heap):程序员通过C的函数(比如malloc)申请的内存区域,使用完毕后释放(或由OS自动释放)
    ③全局区(静态区(Static)):整个程序运行期间一直存在

demo.c
#include <stdio.h>
void main(){
    
}


2、数组与指针
#include <stdio.h>

int main(void){
    int intArr[]={1,3,45,-4,89};
    int * pt;//定义一个存放指针(地址)的变量
    int i;
    pt=&intArr[0];//把数组首地址赋给指针变量pt;也可以这么写:pt=intArr
    for(i=0;i<5;i++){
        printf("array input:%d",intArr[i]);
        printf("   ;");
        printf("point input:%d",*(pt++));//这样也可以把数组里有值打印出来。
        /*这种写法比用数组下标的方式快,原因是:编译器会将a[i]解析成*(a+i);*/
        printf("\n");
    }
    getch();
    return 0;
}

3、字符串、字符、数组
#include <stdio.h>
int change(char *str){
    str="start study C"; /*在这里也可以看出 双引号引起来的 是个地址*/
    printf("%s \n",str);
    return 0;
}
int main(void){
    char *a="hello";/*声明字符串,"hello" 在内存中的首地址赋给指针变量a*/
    char arr[]={'w','o','r','l','d','\0'};/*定义一个字符串,最后一个'\0'是亮点*/
    printf("%s,%s \n",a,arr);
    printf("%d \n",change(a));
    getch();
}

4、结构体
#include <stdio.h>
#include <string.h>

struct s{
       int a;
       char b[10];/*要给长度*/
       char * str;
};
       
int main(void){
    struct s ss;
    ss.a=100;
	//ss.b="error"; //直接赋值是不行的  
	/*方法一*/
	//struct s ss={12,"hello","world"};
	/*方法二*/
	//strcpy(ss.b,"abc"); //
	/*方法三*/
	//char *p="hello world";
	//memcpy(ss.b,p,strlen(p)+1);
	/*end method*/
    ss.str="hello world!";
    printf("%d\n %s\n %s\n",ss.a,ss.b,ss.str);   
}


二、细枝末节
scanf函数是在对应的地址上写内容.
scanf( "%d,%d" ,a,b);这是在地址值a和b上进行写内容.
要注意区分a的值与a的地址&a之间的区别.
如int a = 1; 假设&a = 0xff2a;
scanf("%d", a); //这是在地址值为1的地址上写内容,并不改变变量a的值.
scanf("%d", &a);//这是在地址值为0xff2a的地址上写内容,这样会改变变量a的值.

#include <stdio.h>
main()
{
   int a=10,*p,**q;//q为放指针的指针的变量。
   p=&a;
   q=&p;
   printf("%d\n",**q);
   getch();
}


1.int i;                                     -----定义整型变量
2.int *p;                                   -----P为指向整型变量的指针变量
3.int a[n];                                 -----定义数组a,它有n个元素
4.int *p[n];                               -----定义指针数组,它由N个指向整型数据的指针元素组成
5.int (*p)[n];                             -----P为指向有N个整型元素组成的一维数组的指针变量
6.int f();                                   -----带回整型函数值的函数
7.int *p();                                 -----带回指针值的函数
8.int (*p)();                               -----指向函数的指针,该函数带回整型数值
9.int **p;                                   -----指向指针的指针




注:c/c++不能返回一个数组,只能返回指向数组的一个指针;

malloc的全称是memory allocation

2、运算符的优先级顺序:
     ++(后自增) > *(解引用) > !=(不等于) > =(赋值)
分享到:
评论

相关推荐

    从头开始构建App

    【标题】: "从头开始构建App" 在移动开发领域,构建一个App通常涉及多个步骤和技术,这包括但不限于设计、编程、测试和发布。这里我们将深入探讨如何从零开始创建一个App,以"FSKDemo1"为例,这是一个可能的项目...

    从头开始学Oracle11gRelease2视频教程(15集)

    教程名称:从头开始学Oracle 11g Release 2 视频教程(15集)课程目录:【】Oracle11gRelease2视频教程_1【】Oracle11gRelease2视频教程_2【】Oracle11gRelease2视频教程_3【】Oracle11gRelease2视频教程_4【】...

    vue倒计时刷新页面不会从头开始的解决方法

    然而,在实现倒计时功能时,常常会遇到一个问题:当页面刷新或者重新进入倒计时页面时,由于Vue组件的重新创建,倒计时会重新从头开始,这并不是我们想要的效果。 为了解决这个问题,我们需要在Vue中实现倒计时数据...

    从头开始构建数据库的一个artisan命令

    在这个场景中,"从头开始构建数据库的一个artisan命令"指的是使用Artisan来初始化和设置一个新的数据库,通常包括创建数据表、迁移和填充数据。 首先,我们需要理解Laravel中的数据库迁移(Migrations)。迁移是...

    《从头开始数据科学》随书代码

    【《从头开始数据科学》随书代码】’code for Data Science From Scratch book' by Joel Grus

    仅使用Python基础从头开始构建大型语言模型;从零开始逐步构建GLM4-Lama3-RWKV6,深入了解大型模型的原理.zip

    仅使用Python基础从头开始构建大型语言模型;从零开始逐步构建GLM4-Lama3-RWKV6,深入了解大型模型的原理.zip仅使用Python基础从头开始构建大型语言模型;从零开始逐步构建GLM4-Lama3-RWKV6,深入了解大型模型的原理...

    从头开始训练BERT代码

    标题"从头开始训练BERT代码"意味着我们将探讨如何从零开始构建并训练自己的BERT模型。这个过程通常包括以下几个关键步骤: 1. **数据预处理**: - **分词**:使用像`tokenizer`这样的工具将句子转化为BERT可以理解...

    ChatGPT技术对从头开始对话生成的实验设计与结果分析.docx

    ChatGPT 技术对从头开始对话生成的实验设计与结果分析 ChatGPT 技术是当前人工智能技术领域的热门研究方向之一,旨在实现高质量的对话生成。实现高质量的对话生成是一个挑战性任务,要求模型能够理解用户输入并...

    j从头开始学java

    《从头开始学Java》这份课程资料包含了Java编程的基础到进阶内容,旨在为初学者提供全面的学习指导。以下是对各个章节内容的详细解析: 1. **Java语言概述**:这部分通常会介绍Java的历史背景、特点和应用领域,...

    从头开始学习MySQL and PHP

    从头开始学习MySQL and PHP

    在 PyTorch 中从头开始实现 Yolo-V3.zip

    这是视频系列的补充代码,解释了如何从头开始实现 yolo-v3,可在此处获取。 这是我的尖端深度学习项目频道。Yolo-V3yolov3.cfg (236 MB COCO Yolo v3) - 需要 4 GB GPU-RAMhttps://pjreddie....

    从头开始搭建 Linux 7.0

    标题《从头开始搭建 Linux 7.0》的知识点可以分为以下几个部分: ### 第一部分:绪论 绪论部分介绍了书籍的主旨,即如何从头开始搭建Linux系统。这部分内容是读者在开始学习之前应当掌握的基础知识。 #### 1.1 ...

    Struts 从头开始学习

    Struts 从头开始学习 基于Myeclipse 是一些网页形式的 另存为的

    从头开始的高级机器学习算法

    Decision Tree from scratch 从头开始的决策树 Denoising Autoencoder (DAE) on MNIST 降噪自动编码器 (DAE) 在 MNIST 上 Entity Embeddings for categorical data 分类数据的实体嵌入 Expectation-Minimization ...

    MYSQL实现连续签到功能断签一天从头开始(sql语句)

    1,创建测试表 CREATE TABLE `testsign` ( `userid` int(5) DEFAULT NULL, `username` varchar(20) DEFAULT NULL, `signtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ...

    使用 Tensorflow 从头开始​​训练 YOLOv2 对象检测器 .zip

    python make_tfrecord.py使用 Tensorflow 从头开始​​训练 YOLOv2 对象检测器。python train.py使用 Tensorflow 评估使用 COCO 数据集训练的 YOLOv2 模型。使用 darkflow 项目完成从 Darknet 到 Tensorflow 框架的...

    从头开始系统化的学习如何写Python爬虫 Python版本3.6.zip

    从头开始系统化的学习如何写Python爬虫。Python版本3.6Python 爬虫由于代码是比较早之前写的,抓取的网站目录结构可能会震动所以部分代码可能无法使用了,欢迎正在学习爬虫的大家给这个项目提PR让更多的代码能跑起来...

    从头开始学sharepoint 2010

    从头开始学sharepoint 2010,英文版 PDF

    Paperspace 教程系列“如何从头开始实现 YOLO v3 对象检测器”的附带代码.zip

    YOLO_v3_教程Paperspace 教程系列“如何从头开始实现 YOLO v3 对象检测器”的附带代码这是探测器的典型输出的样子)关于培训守则此代码仅作为本教程系列的补充,不会更新。如果您想查看不断更新的 YOLO v3 代码,请...

    从头开始搭建vulhub_vulfocus.pdf

    从头开始搭建vulhub_vulfocus

Global site tag (gtag.js) - Google Analytics