#include<stdio.h> int main() { int a; int *p=&a; printf("请输入一个整数:"); scanf("%d",&a); printf("a=%d\n",a); printf("请再输入一个整数:"); scanf("%d",p); printf("a=%d\n",a); return 0; }
结果:
请输入一个整数:3
a=3
请再输入一个整数:5
a=5
#include<stdio.h> int main() { char str[128]; printf("请输入鱼C的域名:"); scanf("%s",str); printf("鱼C工作室的域名是:%s\n",str); return 0; }
结果
请输入鱼C的域名:fishc.com
鱼C工作室的域名是:fishc.com
scanf中的str没写&,因为数组名就是一个地址信息
数组名其实是数组第一个元素的地址!
#include<stdio.h> int main() { char str[128]; printf("str的地址是:%p\n",str); printf("str的地址是:%p\n",&str[0]); return 0; }
结果
str的地址是:000000000061FDA0
str的地址是:000000000061FDA0
地址一样!
字符数组,每一个元素都是一个字符,访问字符的地址,当然要用&。
第二个元素的地址应该是第一个地址加上它所占用的空间
#include<stdio.h> int main() { char a[]="Fishc"; int b[5]={1,2,3,4,5}; float c[5]={1.1,2.2,3.3,4.4,5.5}; double d[5]={1.1,2.2,3.3,4.4,5.5}; printf("a[0]:%p,a[1]:%p,a[2]:%p\n",&a[0],&a[1],&a[2]); printf("b[0]:%p,b[1]:%p,b[2]:%p\n",&b[0],&b[1],&b[2]); printf("c[0]:%p,c[1]:%p,c[2]:%p\n",&c[0],&c[1],&c[2]); printf("d[0]:%p,d[1]:%p,d[2]:%p\n",&d[0],&d[1],&d[2]); return 0; }
结果
a[0]:000000000061FE1A,a[1]:000000000061FE1B,a[2]:000000000061FE1C
b[0]:000000000061FE00,b[1]:000000000061FE04,b[2]:000000000061FE08
c[0]:000000000061FDE0,c[1]:000000000061FDE4,c[2]:000000000061FDE8
d[0]:000000000061FDB0,d[1]:000000000061FDB8,d[2]:000000000061FDC0
可发现它的规律的确是这样
指向数组的指针:
#include<stdio.h> int main() { char a[]="fishc"; char *p=a; printf("*p=%c,*(p+1)=%c,*(p+2)=%c\n",*p,*(p+1),*(p+2)); return 0; }
结果
*p=f,*(p+1)=i,*(p+2)=s
也可以不用指针,直接这样也可以
#include<stdio.h> int main() { char a[]="fishc"; printf("*a=%c,*(a+1)=%c,*(a+2)=%c\n",*a,*(a+1),*(a+2)); return 0; }
结果一样
还可以用指针直接定义字符串,然后用下标法读取每一个元素,倒过来,
#include<stdio.h> #include<string.h> int main() { char *str="I love FishC.com!"; int i, length; length=strlen(str); for(i=0;i<length;i++) { printf("%c",str[i]); } printf("\n"); return 0; }
结果
I love FishC.com!
还可以简洁点
#include<stdio.h> #include<string.h> int main() { char *str="I love FishC.com!"; int i; for(i=0;i<strlen(str);i++) { printf("%c",str[i]); } printf("\n"); return 0; }