引用
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、运算符的优先级顺序:
++(后自增) > *(解引用) > !=(不等于) > =(赋值)
分享到:
相关推荐
从头开始训练BERT代码,解压密码在https://blog.csdn.net/herosunly/article/details/113937736
教程名称:从头开始学Oracle 11g Release 2 视频教程(15集)课程目录:【】Oracle11gRelease2视频教程_1【】Oracle11gRelease2视频教程_2【】Oracle11gRelease2视频教程_3【】Oracle11gRelease2视频教程_4【】...
从头开始搭建AppDemo,更多请参考博客
天线基础知识,天线基础知识从头开始,ham必读
从头开始学习c++的程序代码,本人会保持更新,希望对大家有所帮助
引导自己从头开始编写一个操作系统, 一本自学的书
matlab开发-从头开始的图像处理。学习matlab图像处理的基础知识
【《从头开始数据科学》随书代码】’code for Data Science From Scratch book' by Joel Grus
从头开始构建数据库的一个artisan命令
从头开始搭建集群 从头开始搭建集群 从头开始搭建集群
从头开始学习MySQL and PHP
Struts 从头开始学习 基于Myeclipse 是一些网页形式的 另存为的
Decision Tree from scratch 从头开始的决策树 Denoising Autoencoder (DAE) on MNIST 降噪自动编码器 (DAE) 在 MNIST 上 Entity Embeddings for categorical data 分类数据的实体嵌入 Expectation-Minimization ...
1.利用的是Ubuntu系统 2.学习MOOS-IVP极好的工具
从头开始搭建集群Pacemaker
从头开始步步学ERP
从头开始搭建 Linux 7.0 ,是学习从头搭建linux的全文翻译。
numpy从头开始实现神经网络,包括反向传播公式推导过程; numpy构建全连接层、卷积层、池化层、Flatten层;以及图像分类案例及精调网络案例等。 1、网络中梯度反向传播公式推导 2、层:FC层,卷积层,池化层,Flatten 3、...
从头开始学sharepoint 2010,英文版 PDF