c语言--指针及内存的个人体会

1.程序的内存空间是由代码,数据和堆栈组成的,其中数据是指各个变量的值,例如int a,是事先在内存里开辟一个长度为四字节的内存空间,然后再进行例如赋值和运算的操作,指针是一个值为地址的变量,一般初始化形式是int *p,初始化的时候,p是指p是一个指针类型,而他和普通的变量不同的地方是,初始化的时候他并不会开辟内存空间,之后进行指向,例如p=&a,则这个时候p就是a 的值,p则是a的地址。

int*p;//p是一个指针,变量p的类型是int*
char*p//pc是一个指针,pc的类型是char*
char a[20];  
int *ptr=(int *)a; //强制类型转换并不会改变a 的类型  
ptr++; 
int a,b;  
int array[10];  
int *pa;  
pa=&a; //&a 是一个指针表达式。  
int **ptr=&pa; //&pa 也是一个指针表达式。  
*ptr=&b; //*ptr 和&b 都是指针表达式。  
pa=array;  
pa++; //这也是指针表达式。  

2.数组的数组名其实可以看作一个指针。一般而言数组名array 代表数组本身,类型是int[10],但如果把类型是数array 看做指针的话,它指向数组的第0 个单元,类型是int* 所指向的组单元的类型即int。

int array[10]={0,1,2,3,4,5,6,7,8,9},value; 
value=array[0]; //也可写成:value=*array; 
value=array[3]; //也可写成:value=*(array+3); 
value=array[4]; //也可写成:value=*(array+4);

数据段的内存分为全局/静态存储区和常量存储区,都是在代码编译的时候就进行内存分配,其中常量(const)存储区是只读的全局变量,局部变量的const还是存放在栈上;全局/静态的变量则放在一个区域,这块空间在程序结束后释放;静态(static)内存,如static int a,其中初始化的全局变量和静态变量在一个区域,这块空间当程序运行结束后由系统释放。堆栈内存的区别则是堆由程序员操作,栈由编译器操作,函数形参和局部变量在这里进行运算,结束之后进行去栈。

viod func()
{
    static int n=4;//静态变量只初始化一次
    cout<<n<<endl;
    ++n;
}


函数的调用中,形参是进行值的调用,所以不会对原来的值造成影响,但是使用指针,传入值是地址,进行地址操作则能操作到函数以外其他数据段的数据。

void swap(int a,int b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}
int main{
int a=10,b=20;
printf("a=%d,b=%d\n",a,b);//输出a=10,b=20
swap(a,b);
printf("a=%d,b=%d\n",a,b);还是输出a=10,b=20
return 0;
   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值