#include <stdio.h>
#include<stdlib.h>
#include <string.h>
int main () {
//指针数组,他是一个数组,数组里面存放的是指针
//存储了四个 int 类型的地址 占16个字节
int *p[4]={1,2,3,4};
//数组指针,是一个指针,指向含四个元素的一维数组,指向一个数组
//指针的大小在32位平台下只有4个字节
//数组指针多用来引用二维数组
int (*p1)[4];
int arr[4] = {1,2,3,4};
char arr1[] = {'a','b','c','d','e'};
char arr2[] = {"abcde"};
char* arr3 = "abcde";
int arr4[3][4] = {0};
//p1 = arr;
//printf("%d\n",sizeof(p)); //占了16个字节的大小,p是数组名字,这里的数组名字表示整个数组,计算整个数组的大小
//printf("%p\n",*(p+1)); //p
//strlen 计数,直到第一个'\0'出现的时候跳出
//printf("%d\n",strlen(arr1)); //未定义行为
//printf("%d\n",strlen(arr2)); //5
//printf("%d\n", strlen(arr2+0)); //未定义行为将会隐式转换为char* ,转换为地址
//printf("%d\n", strlen(arr3)); //5
//printf("%d\n", strlen(&arr3[0]+1)); //4
//printf("%d\n", strlen(&arr3)); //表示的是一个二级指针
//printf("%d\n",sizeof(p1));
//printf("%p\n",p1); //也是指a[0][0]的地址
//printf("%d\n",*(p1[0]+1)); //指向第0行第一个元素
//printf("%p\n",p1[1]); //指向的第一行的地址
//printf("%p\n",p1[2]); //指向第二行的地址
//printf("%d\n",sizeof(arr4+1)); //表示的是第一行的地址 4
//printf("%d\n",sizeof(&arr4[0]+1)); //表示指向arr4[1]地址 4
//printf("%d\n",sizeof(*(arr4+1))); // 表示 arr4[1] *arr4 表示arr[0] 16 *(arr+1) ==arr[1]
//printf("%d\n",sizeof(*arr4)); //表示arr[0]
return 0;
}
C语言指针储存问题
猜你喜欢
转载自blog.csdn.net/weixin_44077227/article/details/89247670
今日推荐
周排行