指针可以说是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”。
版权声明:本文为博主原创文章,未经博主允许不得转载。