指针数组和数组指针
计算字符串里的字符个数,不要sizeof和strlen
#include<stdio.h> int main() { char str[]="I love FishC.com!"; char *target=str; int count=0; while(*target++!='\0') { count++; } printf("总共有%d个字符!\n",count); return 0; }
结果
总共有17个字符!
因为数组名是不可变的,不能为左值,所以要定义一个指针
指针变量是一个左值,而字符串变量是一个地址常量,不是一个左值
指针数组
#include<stdio.h> int main() { int a=1; int b=2; int c=3; int d=4; int e=5; int *p1[5]={&a,&b,&c,&d,&e}; int i; for(i=0;i<5;i++) { printf("%d\n",*p1[i]); } return 0; }
结果
1
2
3
4
5
备注:因为数组元素存放指针,所以要用取地址
#include<stdio.h> int main() { char *p1[5]={ "让编程改变世界", "just do it", "一切皆有可能", "gogogogo", "one more thing" }; int i; for (i=0;i<5;i++) { printf("%s\n",p1[i]); } return 0; }
结果
让编程改变世界
just do it
一切皆有可能
gogogogo
one more thing
备注:p1前不加*,加了表示取出字符,但我要的是字符串,给出字符串的地址
数组指针
错误写法
#include<stdio.h> int main() { int (*p2)[5]={1,2,3,4,5}; int i; for(i=0;i<5;i++) { printf("%d\n",*(p2+i)); } return 0; }
(因为它是指针,要给它地址才行)
以前学指针是这样写的
#include<stdio.h> int main() { int temp[5]={1,2,3,4,5}; int *p=temp; int i; for(i=0;i<5;i++) { printf("%d\n",*(p+i)); } return 0; }
这里*p指向的是变量,而数组指针是指向数组,有所不同
#include<stdio.h> int main() { int temp[5]={1,2,3,4,5}; int (*p2)[5]=&temp; int i; for(i=0;i<5;i++) { printf("%d\n",*(*p2+i)); } return 0; }
可以不写&
浙公网安备 33010602011771号