写在前
一个指针变量指向某个普通变量,则指针变量就等于普通变量。
指针变量存放的是地址,普通变量存放的是数据。
int * p;
int i=5,j;
p = &i;
此程序,*p=i=5,在所有出现 *p 或 i 的位置,两者都可以互相替换。
通过
j = *p;
可以将i的值5赋给j。
通过指针p间接访问变量a,改变a的值
{
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;
}
一维数组名a存放的是数组第一个元素的地址a[0]
数组名就是个地址信息,数组名就是数组第一个元素的地址。
#include <stdio.h>
int main ()
{
int a[5];
printf ("%d\n",&a[0]);//此处输出为a[0]的地址 6487552
printf ("%d\n",a);//此处输出为数组名a的含义 6487552
return 0;
}
如果p是一个指针变量,那么p[i]永远等价于*(p+i)
#include <stdio.h>
int main()
{
int a[5] = { 1,2,3,4,5};
int i;
for( i = 0 ; i < 5 ; i++ )
{
printf("%d " , a[i]);
}
printf ("\n");
for(i = 0 ; i < 5 ; i++ )
{
printf("%d " , *(a+i));
}
return 0 ;
}
注意:
int (*p[5])
定义了一个数组,数组名为p,其中包含5个指针,指针指向整型类型数据;
int (*p)[5]
定义了一个指针,指针指向一个数组,数组中有5个元素,元素类型为整型。
#include <stdio.h>
int main()
{
char a[] ="iwatch";
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;
}
#include <stdio.h>
int main()
{
char a[] ="iwatch";
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};
char *p=a;
printf("*a = %c, *(a+1) = %c, *(a+2) = %c\n",*a,*(a+1),*(a+2));
printf("*p = %c, *(p+1) = %c, *(p+2) = %c\n",*p,*(p+1),*(p+2));
int *q=b;
printf("*b = %d, *(b+1) = %d, *(b+2) = %d\n",*b,*(b+1),*(b+2));
printf("*q = %d, *(q+1) = %d, *(q+2) = %d\n",*q,*(q+1),*(q+2));
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;
}
#include <stdio.h>
#include <cstring>
int main()
{
char *str="I love iwatch!";
int i,length;
length=strlen(str);
for(i=0;i<length;i++)
{
printf("%c",str[i]);
}
return 0;
}