C语言指针储存问题

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

猜你喜欢

转载自blog.csdn.net/weixin_44077227/article/details/89247670