#include<stdio.h>
int main(){
int a;
int *p=&a;
printf("输一个整数\n") ;
scanf("%d",&a);
printf("a=%d",a);
printf("输一个整数\n") ;
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\n",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\n a[1]=%p\n a[2]=%p\n",&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\n a[1]=%p\n a[2]=%p\n",&a[0],&a[1],&a[2]);
printf("%p",a);
}
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.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++!='\0'){
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://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.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\n",*(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\n",*(*p+i));
}
return 0;
}