数组名就是指针的首元素
#include <stdio.h>
/*
1.数组元素的访问方式
int ages[5];
int *p;
p = ages;
1> 数组名[下标] ages[i]
2> 指针变量名[下标] p[i]
3> *(p + i)
2.指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4
char * 1
double * 8
*/
void change(int array[]);
int main()
{
// 20个字节
int ages[5] = {10, 11, 19, 78, 67};
change(ages);
return 0;
}
// 利用一个指针来接收一个数组,指针变量array指向了数组的首元素
void change(int *array)
{
printf("%d\n", array[2]);
//printf("%d\n", *(array+2));
}
/*
void change(int array[])
{
int s = sizeof(array);
printf("%d\n", s);
}*/
void test()
{
double d = 10.8;
double *dp;
dp = &d;
printf("dp = %p\n", dp);
printf("dp + 1 = %p\n", dp + 1);
int ages[5] = {10, 9, 8, 67, 56};
int *p;
// 指针变量p指向了数组的首元素
p = &ages[0];
// 数组名就是数组的地址,也是数组首元素的地址
//p = ages;
/*
p ---> &ages[0]
p + 1 ---> &ages[1]
p + 2 ---> &ages[2]
p + i ---> &ages[i]
*/
//printf("%d\n", *(p+2));
printf("%d\n", p[2]);
/*
for (int i = 0; i<5; i++) {
printf("ages[%d] = %d\n", i, *(p+i));
}*/
// printf("%p\n", p);
// printf("%p\n", p + 1);
// printf("%p\n", p + 2);
}
定义字符串数组2种方式
// 指针数组(字符串数组)
char *names[5] = {"jack", "rose", "jake"};
// 二维字符数组(字符串数组)
char names2[2][10] = {"jack", "rose"};
定义字符串注意事项
/*
定义字符串的2种方式
1> 利用数组
char name[] = "jack";
* 特点:字符串里面的字符是可以修改的
* 使用场合:字符串的内容需要经常修改
2> 利用指针
char *name = "jack";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
*/
------------------------------------------------------------------
/*
1.常量区
存放一些常量字符串
2.堆
对象
3.栈
存放局部变量
*/
// 字符串变量
char name[] = "it";
name[0] = 'T';
//printf("%s\n", name);
// "it" == 'i' + 't' + '\0'
// 指针变量name2指向了字符串的首字符
// 字符串常量
char *name2 = "it";
char *name3 = "it";//name2和name3的地址是一样的,这样定义的字符串是存在常量区的
//*name2 = 'T';
//printf("%c\n", *name2);
printf("%p\n%p\n", name2, name3);
//printf("%s\n", name2);
网友评论