引用
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,以"FSKDemo1"为例,这是一个可能的项目...
教程名称:从头开始学Oracle 11g Release 2 视频教程(15集)课程目录:【】Oracle11gRelease2视频教程_1【】Oracle11gRelease2视频教程_2【】Oracle11gRelease2视频教程_3【】Oracle11gRelease2视频教程_4【】...
《Python-引导自己从头开始编写一个操作系统》是一本面向自学者的书籍,旨在帮助读者深入理解操作系统的原理,并通过Python语言实现一个简单的操作系统。在学习过程中,你可以掌握计算机系统的基础知识,了解操作...
在这个场景中,"从头开始构建数据库的一个artisan命令"指的是使用Artisan来初始化和设置一个新的数据库,通常包括创建数据表、迁移和填充数据。 首先,我们需要理解Laravel中的数据库迁移(Migrations)。迁移是...
【《从头开始数据科学》随书代码】’code for Data Science From Scratch book' by Joel Grus
仅使用Python基础从头开始构建大型语言模型;从零开始逐步构建GLM4-Lama3-RWKV6,深入了解大型模型的原理.zip仅使用Python基础从头开始构建大型语言模型;从零开始逐步构建GLM4-Lama3-RWKV6,深入了解大型模型的原理...
标题"从头开始训练BERT代码"意味着我们将探讨如何从零开始构建并训练自己的BERT模型。这个过程通常包括以下几个关键步骤: 1. **数据预处理**: - **分词**:使用像`tokenizer`这样的工具将句子转化为BERT可以理解...
ChatGPT 技术对从头开始对话生成的实验设计与结果分析 ChatGPT 技术是当前人工智能技术领域的热门研究方向之一,旨在实现高质量的对话生成。实现高质量的对话生成是一个挑战性任务,要求模型能够理解用户输入并...
《从头开始学Java》这份课程资料包含了Java编程的基础到进阶内容,旨在为初学者提供全面的学习指导。以下是对各个章节内容的详细解析: 1. **Java语言概述**:这部分通常会介绍Java的历史背景、特点和应用领域,...
从头开始学习MySQL and PHP
标题《从头开始搭建 Linux 7.0》的知识点可以分为以下几个部分: ### 第一部分:绪论 绪论部分介绍了书籍的主旨,即如何从头开始搭建Linux系统。这部分内容是读者在开始学习之前应当掌握的基础知识。 #### 1.1 ...
Struts 从头开始学习 基于Myeclipse 是一些网页形式的 另存为的
Decision Tree from scratch 从头开始的决策树 Denoising Autoencoder (DAE) on MNIST 降噪自动编码器 (DAE) 在 MNIST 上 Entity Embeddings for categorical data 分类数据的实体嵌入 Expectation-Minimization ...
从头开始学sharepoint 2010,英文版 PDF
Debian Linux 从头开始完整版资料 Debian Linux 是一个自由的操作系统,它的发展是由它的用户维护的。Debian 的支持是无与伦比的,选择 Debian 您将不会感到孤单。Debian 的安装系统是世界上最好的,安装过程简单...
从头开始搭建vulhub_vulfocus
从头开始复制一些C++项目
从头开始步步学ERP
numpy从头开始实现神经网络,包括反向传播公式推导过程; numpy构建全连接层、卷积层、池化层、Flatten层;以及图像分类案例及精调网络案例等。 1、网络中梯度反向传播公式推导 2、层:FC层,卷积层,池化层,Flatten 3、...
该技术针对的是从头开始训练的神经网络,即那些不依赖预训练权重的模型。由于数据集自动化处理的增加,数据篡改成为了一个日益严重的威胁。攻击者可以通过篡改训练数据来植入“后门”,使得在模型推理阶段,通过特定...