关于C语言的学习,觉得在指针和数组上还是存在些误区。在空闲时自己写了点小小的个人体会,觉得写得不是很好,只是个人的小小心得体会,写得不好的,还请各位高手见谅,指点下误区,联系方式738254743@qq.com,

还望各位高手赐教。

========================================

C语言中一切变量就是内存,定义变量就是申请内存

======================================

1.字符串

======================================

1. 字符串在内存中以字符数组的形式存在,以'\0'结束,长度:字符数+1;

    字符串在运算中:首地址赋地址,取字符串时不需要*(比如: char *p="gght"; printf("%s", p);),但取字符时需要加*;

字符串运算循环结束标志:判断p[i]=='\0';  或者 strlen(p);

sizeof(p)/sizeof(p[0])---->容量

sizeof计算整个数组的总大小

strlen计算字符串本身的大小,不含'\0'

=======================================

2.数组和指针

=======================================

1. 指针和其他类型的互换:既是地址

a.int a; int *p; p=&a;

b.int a[3]; int (*p)[3]; p=&a;

c.int *a[3]; int *(*a)[3]; p=&a;

2. 数组运算时视为指针,首地址与运算

3. 数组长度:如:char a[];  sizeof(a)/siaeof(a[0])-1;

4. 数组和指针运算:

如:

int a[3]; | int a[3];

int *p; | int *p[3];

p=a; | p=&a;

a[i]=*(p+i); |

指针和数组运算时:分两部分:第2部分相同则取 :首地址

   第2部分不相同则取 :&:整个地址

指针的sizeof()=4; 只要是指针就是不变的定理

<5>. 数组的灵活使用:

char * a[] : 分为两部分:1: a[]; 2: char*;

char a[] : 分为两部分:1: a[]; 2: char;

=========================================

3.复杂声明阅读

=========================================

阅读方式 :找出第一个非关键字符,以他为中心剥洋葱似的解析

如:void (* signed(signed, void(*p)int)) int

typedef tmp void (*) int

tmp signed(signed, tmp p)

=========================================

4.数据类型

=========================================

1.重定义:

typedef long int32_t; 定义int32_t 为long 4字节

typedef short int32_4   定义int32_t 为short 4字节

int 4 字节 ,char 1 字节, short 2 字节, long 4 字节;

double : %lf    float : %f;

2. 强制类型转换:

如: int p;

    (char) p;  int--->char

==========================================

5.内存

==========================================

OS------>操作系统

|

|

栈------>局部变量,形参(函数运行结束后,内存给释放)

|

|

堆------>malloc(),calloc(),realloc()分配内存,必须和free()连用

|

|

数据段---->全局变量,static变量(函数运行结束后,内存不释放)

=======================================

6. 调试

=======================================

#ifdef x;

printf("..", x);

#enif

调试部分编译时:gcc --.c  -o .. -Dx 才有效

---------------------------------->完成于:2015年3月10日