前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。
点击跳转到教程
一、C语言多级指针入门
#include
#include
/**
多级指针
指针指向的就是内存地址
地址就是指针
*/
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;
//多级指针取值 ****address4得到的值是100
printf("****address4==%d\n",****address4);
****address4 = 2000;
printf("****address4==%d\n",****address4);
printf("***address3==%d\n",***address3);
****address4 = 2000;
printf("***address3==%d\n",***address3);
printf("i==%d\n",i);
system("pause");
}
输出到控制台内容如下:
对应的内存分析图如下:
二、C语言中数组的简介
#include
#include
/**
数组的介绍
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("iArray[0]==%d\n",iArray[0]);
//取内存地址
printf("cArray地址==%#x\n",&cArray);
printf("cArray[0]地址==%#x\n",&cArray[0]);
printf("cArray[1]地址==%#x\n",&cArray[1]);
printf("cArray[2]地址==%#x\n",&cArray[2]);
printf("cArray[3]地址==%#x\n",&cArray[3]);
//内存是一块连续的内存空间
printf("iArray地址==%#x\n",&iArray);
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("iArray==%d\n",*iArray);
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("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("cArray[0]==%c\n",*(cArray+0));
printf("cArray[1]==%c\n",*(cArray+1));
printf("cArray[2]==%c\n",*(cArray+2));
printf("cArray[3]==%c\n",*(cArray+3));
system("pause");
}
输出到控制台内容如下:
#include
#include
/**
用户输入一个数组
*/
main(){
printf("请输入数组的长度:\n");
//1.用户输入数组的长度
int length;
scanf("%d",&length);
printf("您输入的数组长度为:%d\n",length);
//2.用户根据用户输入的长度创建数组
int iArray[length];
//3.让用户输入数组的值
int i;
for(i=0;i<length;i++){
printf("请输入iArray[%d]的值:\n",i);
scanf("%d",&iArray[i]);
}
//4.把数组内容打印出来
for(i=0;i<length;i++){
printf("iArray[%d]的值=%d\n",i,iArray[i]);
}
system("pause");
}
输出到控制台内容如下:
#include
#include
/**
数组的介绍
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("iArray[0]==%d\n",iArray[0]);
//取内存地址
printf("cArray地址==%#x\n",&cArray);
printf("cArray[0]地址==%#x\n",&cArray[0]);
printf("cArray[1]地址==%#x\n",&cArray[1]);
printf("cArray[2]地址==%#x\n",&cArray[2]);
printf("cArray[3]地址==%#x\n",&cArray[3]);
printf("cArray地址==%#x\n",cArray);
printf("cArray+0地址==%#x\n",cArray+0);
printf("cArray+1地址==%#x\n",cArray+1);
printf("cArray+2地址==%#x\n",cArray+2);
//内存是一块连续的内存空间
printf("iArray地址==%#x\n",&iArray);
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("iArray地址==%#x\n",iArray);
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("iArray==%d\n",*iArray);
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("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("cArray[0]==%c\n",*(cArray+0));
printf("cArray[1]==%c\n",*(cArray+1));
printf("cArray[2]==%c\n",*(cArray+2));
printf("cArray[3]==%c\n",*(cArray+3));
system("pause");
}
输出到控制台内容如下:
#include
#include
/**
用户输入一个数组
*/
main(){
printf("请输入数组的长度:\n");
//1.用户输入数组的长度
int length;
scanf("%d",&length);
printf("您输入的数组长度为:%d\n",length);
//2.用户根据用户输入的长度创建数组
int iArray[length];
//3.让用户输入数组的值
int i;
for(i=0;i<length;i++){
printf("请输入iArray[%d]的值:\n",i);
// scanf("%d",&iArray[i]);
scanf("%d",iArray+i);
}
//4.把数组内容打印出来
for(i=0;i<length;i++){
// printf("iArray[%d]的值=%d\n",i,iArray[i]);
printf("iArray[%d]的值=%d\n",i,*(iArray+i));
}
system("pause");
}
输出到控制台内容如下:
五、C语言中的指针长度
#include
#include
/**
指针的长度 是八个字节
在C语言中,指针的长度是由平台的架构和操作系统的位数决定的。
在大多数32位操作系统中,指针的长度为4字节(32位),而在64位操作系统中,指针的长度为8字节(64位)
*/
main(){
int* iPoint;
char* cPoint;
printf("iPoint的长度==%d\n",sizeof(iPoint));
printf("cPoint的长度==%d\n",sizeof(cPoint));
system("pause");
}
输出到控制台内容如下:
#include
#include
/**
静态内存分配地址
*/
void func(int** address){
//定义int类型的i变量,并且赋值100
int i = 100;
//把i对应的地址赋值给 iPoint
*address= &i;
}
main(){
//定义int类型的一级指针变量iPoint
int* iPoint;
func(&iPoint);
printf("*iPoint===%d\n",*iPoint);//*iPoint===100
printf("*iPoint===%d\n",*iPoint);//*iPoint===0 出现这个的原因是静态内存分配,执行完func()函数后,会被系统回收
printf("*iPoint===%d\n",*iPoint);//*iPoint===0
system("pause");
}
静态内存是程序编译执行后系统自动分配,由系统自动释放,静态内存是栈分配的。
七、C语言中动态内存分配
#include
#include
/**
动态内存分配
*/
void func(int** address){
int i = 100;
int* temp;
//malloc(int)-返回内存地址
temp=malloc(sizeof(int));
//把i对应的值,赋值给temp地址对应的值
*temp = i;
//把address对应的地址,对应的值改为temp
*address = temp;
// free(temp); //回收内存
}
main(){
//定义int类型的一级指针变量iPoint
int* iPoint;
func(&iPoint);
printf("*iPoint===%d\n",*iPoint);//*iPoint===100
printf("*iPoint===%d\n",*iPoint);//*iPoint===100
printf("*iPoint===%d\n",*iPoint);//*iPoint===100
system("pause");
}
内存分析图如下:
#include
#include
/**
动态创建数组
*/
main(){
//动态数组的创建
printf("请输入您要创建数组的长度:\n");
//1.让用户输入一个长度
int length;
scanf("%d",&length);
printf("您输入的数组长度为:%d\n",length);
//2.根据长度,分配内存空间
int* iArray = malloc(length*4);
//3.让用户把数组中的元素依次的赋值
int i;
for(i=0;i<length;i++){
printf("请输入iArray[%d]的值:",i);
scanf("%d",iArray+i);
}
//4.接收用户输入扩展数组长度
int suppLength;
printf("请输入您要扩展数组的长度:\n");
scanf("%d",&suppLength);
printf("您要扩展数组的长度为:%d\n",suppLength);
//5.根据扩展的长度重新分配空间
iArray = realloc(iArray,(length+suppLength)*4);
//6.把扩展长度的元素让用户赋值
for(i=length;i<length+suppLength;i++){
printf("请输入iArray[%d]的值:",i);
scanf("%d",iArray+i);
}
//7.输出数组
for(i=0;i<length+suppLength;i++){
printf("iArray[%d]的值==%d\n",i,*(iArray+i));
}
system("pause");
}
输出到控制台内容如下: