C语言—指针和数组

写在前

一个指针变量指向某个普通变量,则指针变量就等于普通变量。
指针变量存放的是地址,普通变量存放的是数据。

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;
 } 

C语言—指针和数组_第1张图片

一维数组名a存放的是数组第一个元素的地址a[0]

数组名就是个地址信息,数组名就是数组第一个元素的地址。
C语言—指针和数组_第2张图片

#include 
int main ()
{
	int a[5];
	
	printf ("%d\n",&a[0]);//此处输出为a[0]的地址 6487552
	printf ("%d\n",a);//此处输出为数组名a的含义 6487552
	
	return 0;
}

C语言—指针和数组_第3张图片

如果p是一个指针变量,那么p[i]永远等价于*(p+i)

#include 
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 ;
}

C语言—指针和数组_第4张图片

注意:

int (*p[5])

定义了一个数组,数组名为p,其中包含5个指针,指针指向整型类型数据;

int (*p)[5]

定义了一个指针,指针指向一个数组,数组中有5个元素,元素类型为整型。
#include 
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;
}

C语言—指针和数组_第5张图片

#include 
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;
}


C语言—指针和数组_第6张图片

#include 
#include 
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;
}

在这里插入图片描述

你可能感兴趣的:(C&C++,c语言,开发语言)