一、C语言多级指针入门
#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; //多级指针取值 ****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<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("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"); }
输出到控制台内容如下:
三、C语言中让用户输入数组
#include<stdio.h> #include<stdlib.h> /** 用户输入一个数组 */ 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"); }
输出到控制台内容如下:
四、C语言中数组的取值运算
#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("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<stdio.h> #include<stdlib.h> /** 用户输入一个数组 */ 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<stdio.h> #include<stdlib.h> /** 指针的长度 是八个字节 在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"); }
输出到控制台内容如下:
六、C语言中静态内存分配
#include<stdio.h> #include<stdlib.h> /** 静态内存分配地址 */ 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<stdio.h> #include<stdlib.h> /** 动态内存分配 */ 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"); }
内存分析图如下:
输出到控制台内容如下:
八、C语言中动态创建数组
#include<stdio.h> #include<stdlib.h> /** 动态创建数组 */ 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"); }
输出到控制台内容如下: