首页 > 代码库 > GTK+2.0学习——C指针回顾

GTK+2.0学习——C指针回顾

工作需要,开始做GTK,但是很久没碰C了,来捡一下C的精华。

一、*&的意义

*:指针运算符

&:取地址运算符

两者优先级一样,从右向左方向结合

 

二、指针和指针变量

指针:一个变量的地址称为指针

指针变量:专门用来存放指针的变量。

 

#include <stdio.h>

void main(){

int a = 3;//定义一个值为3的变量,假设在内存中的地址为2000

int *pointer;//定义一个指向存放着int型数据的内存的指针变量

pointer = &a;//a的地址赋给pointer,pointer中存放的值为2000

printf("%d",a);//输出3

printf("%d",*pointer);//输出3

}

技术分享

int *pointer;//*的含义是,定义的这个变量是指针变量,只能存放指针;

printf("%d",*pointer);//*的含义是,访问pointer中存放的地址中存放的值。

 

&*pointer:取*pointer的地址,*pointer=3=a,即&a=2000

*&a&a=2000,则*&a的意思为访问地址为2000的内存中的值,即3=*pointer

 

*pointer++*pointer++:同优先级,自右向左结合,所以(*pointer++=a++;*pointer++=a,然后pointer会指向2002int型占两字节,所以int型指针+1的话就是+2个字节。所以指针变量定义时需要指定基类型,不然运算时不知道移动几位,会读到错误的数据)

 

三、指针与数组

技术分享

 

如果数组是float型的,则p+1实际的含义是指向四个字节之后的地址

 

用数组名作为函数参数

#include <stdio.h>

void mian(){

void fint arr[],int n;

Int array[10];

……

f(array,10);

}

void f(int arr[],int n){

……

}

 

把一个数组作为形参传值传的是地址,所以改变地址里面的值时,实参的值会变化。如果传变量的话传的是值,实参不会发生变化。

GTK+2.0学习——C指针回顾