手把手入门C语言—知识点复习

第一个程序

#include <stdio.h>	// #include 相当于Java的 import; stdio:standard input&output  标准的输入输出;  .h:头文件的后缀 ; 包含一些函数(对应Java的方法) 
#include <stdlib.h>	// 导入标准的C语言函数库

system("pause");	//让docs命令行执行 pause 命令,作用是控制台停留 

C语言基本类型

java基本数据类型和C语言的一些区别

  1、java中的char类型的长度为2个字节,C语言中的char的长度为1个字节

  2、java中的long类型的长度为8个字节,C语言中的long的长度为4个字节

  因为C99标准规定:long类型的规定,不小于整型。

  C99:为99年的标准

  3、C语言中没有byte

  4、C语言中没有boolean,if判断用 0(零)表示flase,非零表示true

   signed:有符号:-128 ~ 127(表示一个数的正负) 记忆方法(= -2^7 ~ 2^7-1)

   unsigned:无符号:0 ~ 255 (表示正数) 记忆方法(= 0 ~ 2^8-1)
   void:无类型,代表任意类型

输出函数

输出函数要结合占位符
输出不同的内容要用不同的占位符

%d - int

%ld - long int

%c - char

%f - float

%u - 无符号数

%hd - 短整型

%lf - double

%x - 十六进制输出 int 或者long int 或者short int

%o - 八进制输出

%s - 字符串

printf(“你要输出的内容对应的占位符”);

在C语言中,默认保留小数点后六位

要想保留对应的位数,就需要在百分号后面加上“.数字”

输出函数

// scanf(“占位符”,内存地址);

scanf("%d",&i);

// 输入函数中不能加入换行符,如scanf("%d\n",&i);是不允许的

数组的中括号不能再左边(左边会报错)只能在右边
char[] cArray(报错)、char cArray[]

for循环的变量要定义在外面
 int j;
	 for(j=0;j<5;j++){
	 	// %c:内容
	 	// cArray[%d]:动态的是第几个的 ,动态变化 
	 	printf("cArray[%d]=%c\n",j,cArray[j]);
	 }

互换两个数

/**
内存地址不同,操作的是不相同的值,所以a和b的值没有交换,sitch的局部变量的a和main方法里的a是不相同的内存地址
*/
void sitch(int a,int b){//传值无法改变值
	int temp = a;
	a = b;
	b = temp;
	printf("sitch方法中a的地址=%#x\n",&a);
	printf("sitch方法中b的地址=%#x\n",&b);
}

// 能够装地址的为指针变量 
// int* a:int类型的指针变量 
void sitch2(int* a,int* b){//传地址可以改变值 
	// 指的是3000H这个地址中1000H地址中的值(100) 
	int temp = *a;
	// 把a变量对应地址的值 修改成 b变量对应地址的值 
	*a = *b;
	// 把b变量对应地址的值 修改成 temp
	*b = temp;
	printf("sitch2方法中a的地址=%#x\n",a);
	printf("sitch2方法中b的地址=%#x\n",b);
	printf("\n");
}

函数返回一个以上的值

#include <stdio.h>
#include <stdlib.h>

/**
  返回多个值 
  
  通过内存地址修改对应的值,实现了间接返回多个值 
*/

// 返回了多个值,因为C语言使用了指针(指针就是对应的内存地址,直接去取值就可以了,不用传值,因此这就是C语言高效的原因) 
// int* a:a存放的值为 main函数里的 a的内存地址 
// int* b:b存放的值为 main函数里的 b的内存地址 
// int* a,int* b为形参 
void colse(int* a,int* b){
	// 直接操作地址对应的值 
	*a = 0;
	// 取 b 变量存储的地址的值,赋值为 0 
	*b = 0;
}

main(){
	
	// 一键关闭 GPS 和 Wifi 
	// 1 代表的是开,0 代表是关闭 
	int a = 1;
	int b = 1;
	
	// 可是这里没有返回值(void),为什么返回多个值呢?
	// 因为使用的是内存地址
	// colse方法修改了对应地址的值,所以值改变了,因此不用返回值 
	// &a,&b为实参 
	colse(&a,&b);

	printf("a=%d\n",a);
	printf("b=%d\n",b);



	system("pause");
}

指针

#include <stdio.h>
#include <stdlib.h>

/**
  指针就是内存地址 
  内存地址就是指针
*/
main(){
	
	int i =100;
	int* p = &i;	
	
	//第一个实验: 如果修改 i 值, p值有变化吗? 
	// 修改i值前,p的值时:0x60fef8
	// 修改i值后,p的值时:0x60fef8
	// 得出的结果为不变 
	// 当我们在次打印p的值时,虽然i的值变为200了,但是是打印p的值,打印p的值与i的值(100,200),没有关系。
	/**
	printf("修改i值前,p的值时:%#x\n",p); 
	i =200;
	printf("修改i值后,p的值时:%#x\n",p); 
	
	
	//第二个实验: 如果修改 p 值, i值有变化吗? 
	// 修改 p 的话是修改地址值,所以定义 int j = 200;
	// 结果如下:
	// 修改p值前,i的值时:100
	// 修改p值后,i的值时:100 
	/**
	printf("修改p值前,i的值时:%d\n",i); 
	int j = 200;
	p = &j;
	printf("修改p值后,i的值时:%d\n",i); 
	*/
	
	
	//第三个实验: 如果修改 i 值, *p值有变化吗?
	// *p对应的是int类型的占位符 
	/**
	printf("修改i值前,*p的值时:%d\n",*p); 
	i =200;
	printf("修改i值后,*p的值时:%d\n",*p); 
	*/
	
	
	//第四个实验: 如果修改 *p 值, i值有变化吗? 
	printf("修改*p值前,i的值时:%d\n",i); 
	// 把地址对应的值改变了 
	*p = 200;
	printf("修改*p值后,i的值时:%d\n",i); 
	
	
	system("pause");
}

多级指针

#include <stdio.h>
#include <stdlib.h>

/**
  多级指针 
  指针指向的是内存地址
  地址就是指针 
*/
main(){
	
	// 定义一个int类型的变量 i,并且赋值为100; 
	int i = 100;
	// 定义一个int类型的一级指针变量 address1,并且把 i的地址赋值给它 
	int* address1 = &i;
	// 定义一个int类型的二级指针变量 address2,并且把 address1对应的地址赋值给它 
	// 二级指针指的还是地址,只是指向的地址变了(变为一级指针) 
	int**  address2 = &address1;
	// 定义三级指针 
	int***  address3 = &address2;
	// 定义四级指针 
	int****  address4 = &address3;
	
	// 取的是一个地址 
	printf("***address4的地址=%#x\n",***address4);
	
	// 多级指针取值 ****address4得到的值是100 
	printf("****address4的值=%d\n",****address4);
	
	// *address4(一个 * 的时候相当于取地址对应的值,相当于分析图中 3000H) 
	// 进行值的修改,与一颗 * 的指针是类似的原理 
	****address4 = 2000;
	printf("****address4的值=%d\n",****address4);
	
	system("pause");
}

数组

#include <stdio.h>
#include <stdlib.h>

/**
  数组的介绍
  1、数组的取值
  2、数组的取地址
  3、数组是一块连续的内存空间 
  4、数组的首元素的首地址和数组的地址相同 
  5、数组的设计
*/
main(){
	
	char cArray[] = {'H','E','L','L','O'};
	int iArray[] = {1,2,3,4,5}; 
	// 取数组的值
	printf("cArray[0]=%c\n",cArray[0]); 
	printf("cArray[1]=%c\n",cArray[1]); 
	printf("\n"); 
	
	printf("iArray[0]=%d\n",iArray[0]); 
	printf("iArray[1]=%d\n",iArray[1]); 
	printf("\n");
	
	
	// 数组的首元素的首地址和数组的地址相同 (&cArray和&cArray[0]的地址相同)
	printf("cArray地址=%#x\n",&cArray);
	printf("\n"); 
	
	
	// 取内存地址值 
	//  char占 1 个字节 
	// 内存是一块连续的内存空间
	printf("cArray[0]地址=%#x\n",&cArray[0]); 
	printf("cArray[1]地址=%#x\n",&cArray[1]); 
	printf("cArray[2]地址=%#x\n",&cArray[2]); 
	printf("\n"); 
	
	
	// 数组的首元素的首地址和数组的地址相同  (&cArray和&cArray[0]的地址相同) 
	printf("iArray地址=%#x\n",&iArray);
	printf("\n"); 
	
	
	//  int占 4 个字节 
	// 16进制 10 为 a 
	// 内存是一块连续的内存空间
	printf("iArray[0]地址=%#x\n",&iArray[0]); 
	printf("iArray[1]地址=%#x\n",&iArray[1]); 
	printf("iArray[2]地址=%#x\n",&iArray[2]); 
	printf("iArray[3]地址=%#x\n",&iArray[3]); 
	printf("\n"); 
	
	
	// 用指针取值(因为数组是一块连续的内存空间,内存空间就为地址) 
	printf("iArray=%d\n",*iArray); 
	// iArray+0:得到一个过后在 加上一个下标,因为数组是一块连续的内存空间,加上一个下标相当于跳到下一个 
	printf("iArray[0]=%d\n",*iArray+0);
	printf("iArray[1]=%d\n",*iArray+1);
	printf("iArray[2]=%d\n",*iArray+2);
	printf("iArray[3]=%d\n",*iArray+3);
	printf("\n");
	
	
	// 另外一种取法 (正规的做法) 
	// (iArray+0):加上一个坐标在去取值,相当于根据下标去取值(这种是根据下标去取值) 
	printf("iArray[0]=%d\n",*(iArray+0)); 
	printf("iArray[1]=%d\n",*(iArray+1)); 
	printf("iArray[2]=%d\n",*(iArray+2)); 
	printf("iArray[3]=%d\n",*(iArray+3)); 
	
	system("pause");
}

数组的特点

在这里插入图片描述
在这里插入图片描述
加 1 就可以取 0x28ff14 这个值了(后面一样的操作)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你想学习C语言,即使你没有计算机编程的基础,也不必担心。有一些简单的步骤可以帮助你入门。首先,你可以从了解C语言的基础知识开始。有一些介绍C语言基础知识的资料可以帮助你大致了解C语言的特点和用法。接下来,你需要选择一个合适的开发环境来编写和运行C语言程序。一个常见的选择是使用编译器,例如Dev C++或者Visual Studio 2019。然后,你可以尝试编写你的第一个C语言程序。这个程序可以非常简单,比如打印一句话在屏幕上。通过编写和运行这个程序,你可以开始对C语言的语法和结构有一些实际的了解[3]。从这个起点开始,你可以继续学习更多的C语言知识,并挑战更复杂的编程任务。在学习过程中,你可以阅读教材、参考文档、查找在线资源或参加编程课程来加深你的理解和技能。记住,坚持实践是学习编程的关键。通过不断地编写和调试程序,你会逐渐掌握C语言的基础,并逐渐提升自己的编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言初阶——手把手教零基础/新手入门(万字心得笔记)](https://blog.csdn.net/m0_63312733/article/details/122145605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值