指针和数组
1.数组名是数组第一个元素的地址
2.数组地址=数组名=数组第一个元素的地址
3.指向数组的指针
char *p;
p=a;
p=&a[0];
4.p+1并不是简单地将地址加1,而是指向数组的下一个元素
指针和数组的区别
字符指针变量是一个左值,数组名是地址常量
实验一:判断有多少个字符:
#include <stdio.h>
int main(void)
{
char str[] = "I love FishC.com!";
char *target = str;
int count = 0;
//左值同时还必须是可改变的
//先运算++,再运算*
//字符指针变量是一个左值
//数组名是一个地址常量
//下面的语句不能写成:while (*str++ != '\0')
while (*(target++) != '\0')
{
count++;
}
printf("总共有%d个字符!\n", count);
return 0;
}
指针数组和数组指针
指针数组:是一个数组(int *p1[5]),优先级:[] > * (指针的数组)
结论:指针数组是一个数组,每个数组元素存放一个指针变量
实验二:整形指针数组:将整形变量赋值到指针整形数组里,然后打印出来
#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;
}
实验三:字符指针数组:打印指针字符数组里面的数据
#include <stdio.h>
int main()
{
//指针字符数组
char *p1[5] = {
"让编程改变世界",
"Just do it -- NIKE",
"一切皆有可能 -- 李宁",
"永不止步 -- 安踏",
"One more thing -- 苹果",
};
int i;
for (i = 0; i < 5; i++)
{
printf("%s\n", p1[i]);
}
}
数组指针:是一个指针 int(*p2)[5];(数组的指针)
结论:数组指针是一个指针,它指向的是一个数组
数组指针:数组名的指针,即数组首元素的指针(可以理解为指向指针的指针)
实验四:数组指针
#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;
}