【重生之我要苦学C语言】深入理解指针4

深入理解指针4

字符指针变量

指针指向字符变量

char ch = 'w';
char* p = &ch;

指针指向字符数组

char arr[10] = "abcdef";
char* p = arr;
printf("%s\n", arr);
printf("%s\n", p);

结果是一样的

也可以写成:

char* p = "abcdef";//常量字符串
//将字符串首字符a的地址赋值给p

字符数组可以存放字符串,字符数组的内容可以修改
常量字符串和数组是非常相似的,也是在一个连续的空间中存放了多个字符,但是常量字符串的内容不能修改

*p='w';//错误的,常量字符串不能被修改

因此可以写为:

const char* p = "abcdef";

看一道题:

int main(){
   
	char strl[] = "hello bit.";
	char str2[] = "hello bit.";
	const char* str3 = "hello bit.";
	const char* str4 = "hello bit.";
	if (str1 == str2)
		printf("strl and str2 are same\n");//1
	 else
		printf("strl and str2 are not same\n"); //2
	if (str3 == str4)
		printf("str3 and str4 are same\n"); //3
	else
		printf("str3 and str4 are not same\n");//4
	return 0;
}

问:打印结果
答案为:2 3

str3和str4完全相同,为了节省内存,str4并不会被创建

在这里插入图片描述

str1,str2为数组名,是数组首元素的地址,两个数组创建的是不同的空间,首元素地址不同,故str1!=str2
str3,str4比较的是两个指针变量中存放的地址,所以str3==str4

数组指针变量

存放的是数组的地址——指向数组的指针

&arr——数组的地址

int arr[5] = {
    0 };
int(*p)[5] = &arr;
//p为数组指针变量
//int: p指向的数组的元素类型
char arr[8];
char(*pc)[8] = &arr;
char* arr[8];
char*(*pc)[8] = &arr;//指针数组指针
//pc数组指针变量

int arr[6] = {
    1,2,3,4,5,6 };
int(*p)[6] = &arr;

为例:
因为:

  *p = *&arr = arr;

所以求数组长度:

printf("%zd\n", sizeof(arr));

或者:

printf("%zd\n", sizeof(*p));

输出数组:

for (i = 0;i < 6;i++) {
   
	printf("%d ", arr[i]);
}

或者:

for (i = 0;i < 6;i++) {
   
	printf("%d ", (*p)[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值