const
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;
const char* p = "abcdef";
//指向第一个字符a、
//const是常量,是不可更改的。放置在常量区。
//*p = 'w';
//err,常量字符串不可修改。
printf("%c\n", *p);
printf("%s\n", p);//打印地址。
//p是指针变量,在x86环境下是4个字节,x64环境下是8个字节。
return 0;
}
int main()
{
const char* p1 = "abcdef";
const char* p2 = "abcdef";
char arr1[] = "abcdef";
char arr2[] = "abcdef";
if (p1 == p2)
{
printf("p1 == p2\n");
}
else
{
printf("p1 != p2\n");
}
if (arr1 == arr2)
{
printf("arr1 == arr2\n");
}
else
{
printf("arr1 != arr2\n");
}
return 0;
}
//结果是*p1=*p2,arr1!=arr2,因为指针指向的是同一个字符串,地址相同。
//arr1,arr2开辟的空间地址不一样。
指针数组
指针数组
存放指针的数组。
整型数组
存放整型的数组。
int* arr[10];//存放整形指针的数组,
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* p1 = &a;
int* p2 = &b;
int* p3 = &c;
int* arr[3] = { &a, &b, &c };//arr就是一个指针数组
int i = 0;
for (i = 0; i < 3; i++)
{
printf("%d ", *(arr[i]));
}
return 0;
}
数组指针
指向一个数组的指针。
int(*p)[10]
void print1(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
printf("\n");
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//写一个函数打印arr数组的内容
int sz = sizeof(arr) / sizeof(arr[0]);
print1(arr, sz);
return 0;
}
int main()
{
int a = 10;
int* p = &a;
int arr[10] = {0};
//数组是首元素的地址
printf("%p\n", arr);
printf("%p\n", arr+1); //加一个元素大小。
printf("%p\n", &arr[0]);
printf("%p\n", &arr[0]+1);//加一个元素的大小
printf("%p\n", &arr);
printf("%p\n", &arr+1); //加一个数组的大小。
return 0;
}