C总结提高篇数据类型(大小,别名,封装)、变量、程序的内存四区模型 原文链接:https://blog.csdn.net/Daycym/article/details/78385028
“类型”是对数据的抽象 类型相同的数据有相同的表示形式、存储格式以及相关的操作 程序中使用的所有数据都必定属于某一种数据类型
把char *p1 = “abcdefg”;改为char *p1 = “abcdefg2”;发现指针所指地址一样。
1) 指针也是一种变量,占有内存空间,用来保存内存地址 2)*p操作内存 在指针声明时,*号表示所声明的变量为指针 在指针使用时,号表示 操作 指针所指向的内存空间中的值 p相当于通过地址(p变量的值)找到一块内存;然后操作内存 p放在等号的左边赋值(给内存赋值) p放在等号的右边取值(从内存获取值) 3)指针变量和它指向的内存块是两个不同的概念 //含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1; //p++ //含义2 给p赋值p=’a’; 不会改变指针变量的值,只会改变所指的内存块的值 //含义3 =左边p 表示 给内存赋值, =右边p 表示取值 含义不同切结! //含义4 =左边char *p //含义5 保证所指的内存块能修改 4)指针是一种数据类型,是指它指向的内存空间的数据类型 含义1:指针步长(p++),根据所致内存空间的数据类型来确定 p++=->(unsigned char )p+sizeof(a); 结论:指针的步长,根据所指内存空间类型来定。
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> void main() { int a = 10; char *p1 = 100; //分配4个字节的内存 char ****p2 = 100; int *p3 = NULL; p3 = &a; *p3 = 20; //间接的修改a的值 //*就像一把钥匙 通过一个地址(&a),去修改a变量的标示的内存空间 { int c = 0; c = *p3; //c=20 //*p放在=号左边 写内存 //*p放=号的右边 读内存 printf("c:%d \n", c); } { char *p4 = NULL; p4 = (char *)malloc(100); p4 = (char *)malloc(200); //0xcc11 } printf("a:%d , p1:%d , p2: %d", sizeof(a), sizeof(p1), sizeof(p2)); printf("hello...\n"); system("pause"); return ; }保证所指的内存块能修改
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> char *getStr() { char *tmp = NULL; tmp = "abcdefgf"; return tmp; } void main() { char *p = getStr(); printf("p:%s \n", p); *(p+2) = 'r'; //经常出现的错误 保证指针所指向的内存空间 可以被修改 system("pause"); return ; }