指针可以说是C语言的灵魂了!

int x,*y = &x;  //把x的地址给了y
int *x,*y;
x = y;
//*取内容,&取地址  *只操作地址
int *p;  //p+1跳4个
double *p;  //p+1跳8个

指针不可以做加法,但可以做减法

 

数组名就是一个指针常量

 

绝对不能对未赋值的指针变量作“指向”运算

int *p = &a;  //a[i]等价于*(a+i)

a[i]等价于*(p+i)等价于*(a+i)等价于p[i]

&a[i]等价于p+i等价于a+i等价于&p[i]

 

交换地址

这题是刷计算机二级C语言的时候遇到的题目。

 

交换地址里面的值

#include<stdio.h>
void fun(int *a,int *b){
    int k;
    k = *a;
    *a = *b;
    *b = k;
}
main(){
    int a = 1,b = 2,*x = &a,*y = &b;
    fun(x,y);
    printf("%d %d",a,b);
}

答案是:输出2,1。

 

 

 

有以下程序:

#include<stdio.h>
void fun(char *c,int d){
       *c = *c+1;
       d += 1;
       printf("%c,%c",*c,d);
}
main(){      
       char a = 'F',b = 'f';
       fun(&b,a);
       printf("%c,%c\n",a,b);
}

程序的输出结果为(g,GF,g)。

 

此题考查的是函数参数的传递。

 

main函数中首先调用fun函数,fun函数的功能是使字符c的ASCII值加1并输出,使d加1并输出对应的字符;fun(&b,a)输出“g,G”,但是由于fun函数的第一个参数进行的是地址传递,而第二个参数进行的是值传递,所以main函数中的printf函数输出“F,g”。

版权声明:本文为博主原创文章,未经博主允许不得转载。