C语言中指针与数组的关系
include<stdio.h>
void arr_demo(){
// 数组与指针的关系。
int arr[3]={1,2,3};// 数组的类型是 int[3]
printf("%lu\n",sizeof(arr));//12
// 数组下表偏移 数组名在表达式中参与运算,代表数组元素的首地址。
printf("%p\n",arr);// 打印的的是数组首的元素的地址。
printf("%p\n",&arr);//0x7ffcf354ab50 整个数组的地址和数组第一个元素的地址相同。
printf("%d\n",arr[0]);// 打印数组中第一个元素的值
printf("arr第一个元素的值%d\n",*arr);//*arr = arr[0];
printf("%d\n",*(arr+1));
printf("%p\n",arr+1);// 打印的是
// 错误的 printf("%d\n",*(arr+sizeof(arr)*3));
}
void ptr_arr(){
char s[] = {'w','o','r','l','d'};
char *ps;// 指针指向了数组,--数组指针
ps = &s[2];//ps 指向了 r 的地址
// 打印s[2] 即 r元素。
printf("s[2]=%c\n",s[2]);
printf("%c\n",*ps);//s[2]= *ps// ps 指向了 s[2]这个元素
printf("%p\n",ps);// s[2]的地址。
printf("%p\n",s+2);// 打印的是s[2] 的地址。
printf("%c\n",*(s+2));// *(s+2) 相当于 s[2]
printf("%c\n",*(ps-2));//w
printf("+++++下面打印数组的地址+++++++\n");
printf("s = %p\n",&s);// 整个数组的首地址
printf("xx=%p\n",s);
// 从新定义一个指针
printf("+++++\n");
}
// 定义一个指针 指向整个数组;/
void arr_to_ptr(){
char (*parr)[5];// 数组指针,指针指向了整个数组;
// parr 指向的变量类型为 - char[5];--去掉变量名和第一个*
printf("%p\n",*parr);// 打印的是数组的地址。
printf("%c\n",(*parr)[0]);
}
// 二维 与 而为数组
void ptr_arr_arr(){
// 此时位指针数组--是数组。里面存的是指针。
char s[] = {"lunix","world"};
// s 的变量类型 char [2]
printf("%lu\n",sizeof(s));// 16字节 两个指针类型。
printf("%s\n",s);//
printf("%s\n",s[0]);
printf("%s\n",(s+1));
// 打印数组s的地址
printf("%p\n",s);// 表示首元素的地址
printf("%p\n",&s[0]);
printf("%p\n",&s[1]);// world的地址。
printf("%p\n",&s[0][0]);
printf("%p\n",*s);// *s 代表二维数组中首个元素的地址。
printf("%c\n",**s);// l
printf("%c\n",s[0][0]);// l
}
int main()
{
ptr_arr_arr();
// arr_to_ptr();
// arr_demo();
// ptr_arr();
if 0
int a =10;
int *p;
p = &a;
printf("xx=%d\n",a);
printf("a的地址=%p\n",&a);
printf("yy也是a的地址=%p\n",p);
printf("%d\n",*p);
// 打印p的地址
printf("p的地址%p\n",&p);
printf("+++++++++++++++\n");
// 二级指针的学习
int **pp;
pp = &p;
// 打印a的值
printf("a = %d\n",a);
printf("ax=%d\n",*p);
printf("axx=%d\n",**pp);
// 打印a 的地址
printf("a的地址%p\n",&a);
printf("a的地址%p\n",p);
printf("a的地址%p\n",*pp);
// 打印p的地址
printf("p的地址%p\n",&p);
printf("p的地址%p\n",pp);
// 打印pp的地址
printf("pp的地址%p\n ",&pp);
endif
return 0;
}

浙公网安备 33010602011771号