c语言指针非常重要,可以成为c的灵魂。为了更深入的理解指针,以下是几个关于指针的小练习
//指针变量作为函数参数,将两个变量的值互换
<span style="font-family: Arial, Helvetica, sans-serif;">#import <Foundation/Foundation.h></span>
void swap (int *a, int *b);
void swap (int *a, int *b)
{
int temp;
temp = *a;//通过改变指针指向得值来改变变量得数值
*a = *b;
*b = temp;
}
int main(int argc, const char * argv[])
{
//指针练习
//指针变量作为函数参数来改变两个变量得值
int a = 28, b = 34;
int *p = &a;
int *q = &b;
swap(p, q);
printf("a = %d, b= %d", a, b);
return 0;
}
int main(int argc, const char * argv[])
{
//指针练习
//数组元素的指针——数组元素的指针就是数组元素的地址,可以用一个指针变量指向一个书组元素
int a[5] = {33,45,67,34,9};
int *p , x;
p = &a[0];//让指针p指向零号元素的地址
//利用下标法引用数组元素
x = a[3];//将第4个元素的值给x
//利用指针引用数组元素
x = *(p+2);//将第4个元素的值给x
return 0;
}
通过指针变量输出整型数组a的10个元素
int main(int argc, const char * argv[])
{
//指针练习
//通过指针变量输出整型数组a的10个元素
int a[10], *p;
p = a;//指针p指向a数组的0号元素
printf("please enter 10 integer numbers: ");
for (int i = 0; i < 10; i++) {
scanf("%d",p++);//每输入一个数字,指针向后移动一位,指向下一个元素的地址
}
p = a;//经过一轮循环后,指针已经指向数组的最后一个元素地址,为了正常打印出结果,需要将指针重新指向首元素
<pre name="code" class="objc">for (int i = 0; i < 10; i++,p++) {
printf("a[%d] = %d ", i, *p);
}
return 0;} 指针使用的小技巧:
假如指针p指向a[0];
则:
(1)p++;
*p;
先让p加一,指向下一个元素的地址,再做取值操作,即取出a[1]的值。
(2)、*p++;
由于++和*运算同优先级,结合方式为右jiehe,所以等同于*(p++);先引用p的值,实现*p运算,再让p的值加一,指向下一个元素的地址。
以上程序的输出部分可以简化为:
for (int i = 0; i < 10; i++) {
printf("a[%d] = %d ", i, *p++);
}
(3)、*(p++)与*(++p)区别:
*(p++)是:先取p所指向地址的值,然后让p+1;
*(++p)是:先让p+1,再取(p+1)后指向地址的值。
(4)、++*(p)。表示取出p指向地址的值后,再将此值加一。