#include<stdio.h> int main(){ int a; int *p=&a; printf("输一个整数 ") ; scanf("%d",&a); printf("a=%d",a); printf("输一个整数 ") ; scanf("%d",p); printf("a=%d",a); }
对字符串;
#include<stdio.h> int main(){ char str[123]; printf("输入一个字符串"); scanf("%s",str) ; printf("str=%s",str); }
数组名的真实身份:
#include<stdio.h> int main(){ char str[123]; printf("输入一个字符串"); scanf("%s",str) ; //printf("str=%s",str); printf("%p ",str); printf("%p",&str[0]); }
#include<stdio.h> int main(){ char a[]="hello,,world!"; int b[5]={1,2,3,4,5}; float c[5]={1.1,1.2,1.3,1.4,1.5}; printf("a[0]=%p a[1]=%p a[2]=%p ",&a[0],&a[1],&a[2]); printf("%p",a); }
指向数组的指针
指针法:
#include<stdio.h> int main(){ char a[]="hello,,world!"; int b[5]={1,2,3,4,5}; float c[5]={1.1,1.2,1.3,1.4,1.5}; printf("a[0]=%p a[1]=%p a[2]=%p ",&a[0],&a[1],&a[2]); printf("%p",a); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> int main(){ char *str="I love you"; int i,length; length=strlen(str); for(i=0;i<length;i++){ printf("%c",str[i]); } return 0; }
指针与数组的区别:
#include<stdio.h> #include<string.h> int main(){ char str[]="I love you"; int count=0; char *p=str; while(*p++!=' '){ count++; } printf("字符串长度%d",count); return 0; }
数组名为一个地址,指针名为一个左值
指针数组与数组指针
int *p[5]; //指针数组 int (*p)[5];//数组指针
指针数组是一个数组,每个数组元素存放一个指针变量
#include<stdio.h> #include<string.h> int main(){ int a=1; int b=2; int c=3; int *p[3]={&a,&b,&c}; int i; for(i=0;i<3;i++){ printf("%d",*p[i]); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> int main(){ char *p[5]={ "我是", "王", "大", "chui", "haha" }; int i; for(i=0;i<5;i++){ printf("%s",p[i]); } return 0; }
数组指针:
数组指针是一个指针,它指向的是一个数组
错误一:
#include<stdio.h> #include<string.h> int main(){ int (*p)[5]={1,2,3,4,5} ; int i; for(i=0;i<5;i++){ printf("%d",*(p+i)); } return 0; }
错误二:
#include<stdio.h> #include<string.h> int main(){ int array[]={1,2,3,4,5} ; int (*p)[5]=array; int i; for(i=0;i<5;i++){ printf("%d",*(p+i)); } return 0; }
正确一:指向第一个元素,而不是数组
#include<stdio.h> #include<string.h> int main(){ int tmp[5]={1,2,3,4,5}; int *p=tmp;//指向第一个元素 int i; for(i=0;i<5;i++){ printf("%d ",*(p+i)) ; } return 0; }
正确二:指向数组
#include<stdio.h> #include<string.h> int main(){ int tmp[5]={1,2,3,4,5}; int (*p)[5]=&tmp;//指向第一个元素 int i; for(i=0;i<5;i++){ printf("%d ",*(*p+i)); } return 0; }