![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程语言之 C
文章平均质量分 66
「已注销」
学习是我生活中的一部分,也是让我快乐的源泉之一;坚持学习,让自己不断的进步;
展开
-
c语言之const理解
const:在C语言中的中文意思就是常量,不可修改的;//定义一个int类型的常量const int a = 20;int const a = 20;这两种定义的结果都是一样的,这个常量一旦定义,就不可以直接修改a的置void main(){ //代表一个整形常量 const int a = 10; int const a = 10; /*定义了一个char型的常指针原创 2015-11-07 23:29:23 · 604 阅读 · 0 评论 -
c语言之字符串分离
//从字符串中分离出逗号隔开的字符串 保存于二维数组中void SplitStrByStr( char* sources, char str, char arry[10][20], int* count){ int tmpCount = 0; char* sourcesCp1 = NULL; char* sourcesCp2 = NULL; sourcesCp1 = sources;原创 2015-11-15 14:56:47 · 1722 阅读 · 0 评论 -
c语言之多级指针理解一
//arry:是指针变量,存储的是pObj变量的内存地址void GetMallocMemory(char*** arry,int cnt){ //如果arry为null,代表没有这个内存空间,也就是没有分配 if (arry == NULL){ return; } //这里的*arry代表的是arry的内存块数据,数据类型是指针类型的** char** tmp = *arry;原创 2015-11-15 13:31:31 · 535 阅读 · 0 评论 -
c语言之指针数组理解三
直接给出例子://打印指针void PrintArryData(char** arry, int cnt){ for (int i = 0; i < cnt; i++){ printf("%s\n", *(arry + i)); }}//交换内存地址(指针指向)void SortArryData(char** arry, int cnt){ char* tmp = NULL原创 2015-11-14 17:40:34 · 383 阅读 · 0 评论 -
c语言之指针数组理解二
//arry:代表的是二维数组的首地址 也就是第一个内存块的地址void PrintArryData(char arry[10][20], int cnt){ for (int i = 0; i < cnt; i++){ /*arry+i:指下一个内存块的地址 *(arry+i):指向下一个内存块数据 这里特别要注意一个事情:这里每个内存块的步长是1,如果是指针(指针数组理解一文章中)原创 2015-11-14 15:40:05 · 469 阅读 · 0 评论 -
c语言之指针数组理解一
直接给出demo和内存图进行分析//打印指针数组/*这里为什么要定义为二级指针:首先,数组本身就是一个一级指针,在加上定义的是指针数组,也就是存储的数据是指针,所以是二级指针*/void PrintArryData(char** arry, int cnt){ if (arry == NULL) return; for (int i = 0; i < cnt; i++){原创 2015-11-11 22:08:34 · 568 阅读 · 0 评论 -
c语言之栈存储区和全局区理解
首先给出一个例子:#include "stdafx.h"#include "stdlib.h"char* getStr1(){ char* p1 = "abcde1"; return p1;}char* getStr2(){ char* p2 = "abcde2"; return p2;}int _tmain(int argc, _TCHAR* argv[])原创 2015-10-24 15:42:39 · 485 阅读 · 0 评论 -
c语言之栈存储区和堆区理解
栈:就是迟到早退、先进后出;内存的分配、释放管理都是由系统自己完成,不需要自己管理;堆:是由自己动态申请的,如果不释放,会一直存在的;申请内存的时候会用到关键字mallco下面是一个堆的申请返回和栈的内存分配返回 可以看出它们的生命周期和内存管理机制//手动申请内存空间 这是存储与堆中的char* getMalloc(int num){ char* p1 = NULL; /*原创 2015-10-24 16:45:05 · 1285 阅读 · 0 评论 -
c语言之指针理解一
1、指针是一种变量,占有内存空间,用来保存内存地址的void Demo(){int a = 10;}非指针内存图:定义了一个int型变量,a属于内存区的栈中,给它分配了一个内存地址,该内存空间中存储的类型必须为int,a的值是全局区中的10,这里是10这个数据,而不是10在全局区的内存地址;void Demo(){int* p = 10;}int:该变量是i原创 2015-10-24 22:23:24 · 432 阅读 · 0 评论 -
c语言之野指针理解
野指针:通俗的讲究是这个指针所指向的内存空间还存在,但是内存数据已经不存在,所以使用野指针就会出现异常,给出如下代码和图片进行分析int _tmain(int argc, _TCHAR* argv[]){ char* tmpObj = NULL; //输出tmpObj在栈中的内存地址 printf("tmpObj:%d\n", &tmpObj); //输出tmpObj在栈中内存地址中存原创 2015-10-25 13:26:00 · 770 阅读 · 1 评论 -
c语言之sizeof 与 strlen理解
直接给出如下程序进行操作理解int _tmain(int argc, _TCHAR* argv[]){ //定义了一个指向char类型的指针变量str1,在栈中分配一个内存给str1,把全局区的常量"Rose_Girls"的地址赋值给str1; char* str1 = "Rose_Girls"; //定义了一个指向char类型的数组变量,在栈中分配类存,通过全局区的常量"Rose_G原创 2015-11-01 16:00:15 · 468 阅读 · 0 评论 -
c语言之指针与数组理解一(数据拷贝)
直接给出例子//数据的拷贝void copyStr(char* souces, char* to){ /* 在c语言中,是无法对空指针进行数据的读取和写入的,这是受到操作系统的保护,如果要去访问 或者是写入数据,程序会直接挂掉的;所以这里要进行判断,是否对操作的指针已经进行内存分配了, 是否可以对它们进行操作 */ if (souces == NULL || to =原创 2015-11-01 16:48:34 · 1300 阅读 · 0 评论 -
c语言之多级指针理解二
通过字符分离的demo进行理解://释放内存空间void FreeAllMemory(char*** toArry, int cnt){ if (toArry == NULL) return; char** tmpArry = NULL; tmpArry = *toArry; for (int i = 0; i < cnt; i++){ if (tmpArry[i] !=原创 2015-11-15 18:06:31 · 493 阅读 · 0 评论