C指针具有很重要的作用,就不多说了。
其中学习指针首先要知道两个符号 * 和&。
在类型后面和变量名前面添加* ,代表这是一个指针对象,如int * k,这代表一个指向int类型的指针k。
而&则是取地址符,在c中如过有int k= 10;那么使用&k,则是取出i在计算机中的地址,而指针正是指向这个地址的。
所以int * p = &k;这个表达式意思为int型指针p指向i的地址,如果要取出这个地址中所保存的值,那么直接使用 * p就可以了。
这里要区别一件事,就是int * p是申明这是一个指向int型的指针,而*p则是取出这个指针所指对象的值。
也就是:
int k=10;
int * p = &k; // 指针p指向k
printf("获取指针p里面保存的值 %d \n", *p); // 打印出指针p中所保存的值。
指针与数组
指针与数组又是一个比较难的地方。
一个数组的地址是其第一个元素的地址,因此在c中书写函数原型的时候,以下四种写法是等价的:
int sum(int *ar, int n);
int sum(int *, int n);
int sum(int ar[], int n);
int sum(int [], int);
当然了,在函数原型中书写时可以省略参数名,但是在函数定义中是不能省略的,大家要注意。
以下是数组与指针的一些简单使用:
char ch[] = "I'am special";
char * pr = ch;
printf("address of ch %p \n", ch); //查看ch的地址,数组的地址即其第一个元素的地址
printf("address of pr %p \n", pr); // 指针的值为ch的地址:
printf("address of pr %c \n", *pr); //取出ch第一个元素的值, %c指的是获取单字符
ch[5] = 'q'; // 修改ch第5个元素s为p
printf("%c \n",ch[5] ); // 获取ch第五个元素
printf("%c \n",*(pr+ 5)); // 通过指针获取ch第五个元素
printf("%p \n",&ch[5] );// 获取ch第五个元素地址
printf("%p \n", pr+5);// 通过指针获取ch第五个元素地址
网友评论