c语言指针问题

const与指针
将指针和const关键字相结合,就有了如下的题目:
a)char * const p;
b)char const *p;
c)const char *p;
d) char const* const p;
问题:请问上述三种数据类型的含义。 

解答:
a)一个指针,指向char数据类型,p是常量。【指针不可更改】
b)一个指针,指向char数据类型,p指向的数据是常量。【所指的内容不可更改】
c)一个指针,指向char数据类型,p指向的数据是常量。(char放在前后都没关系)
d)一个指针,指向char数据类型,p是常量,p指向的数据也是常量。【指针和所指向的数据都不可更改】

思考:
试试总结一下static关键字与指针的关系。
指针与数组与常量
将指针和数组相结合,就有了如下的题目:
char *p="abcdef";
char a[]="abcdef";
问题:请问p[i]与a[i]的区别?

解答:
首先,"abcdef"是一个字符串,在编译的时候,字符串被放在常量区。(挖坑,C:请描述一个可执行程序占用的内存分为哪几个区?每个分区各自的作用?)
*p是指针,指向常量区的字符串。
a[]是数组,在程序执行时,会从常量区拷贝"abcdef"到栈上,再继续后续的操作。
因此,这两个变量的指向的内存区域不同,打印的内存地址不同。

思考:
在上述题目的基础上,加上如下代码,编译是否会出错?为什么?
p[1]='h';
a[1]='h';
【提示:常量区数据无法修改】
上面的确定都会了?
将指针和关键字结合,再和数组结合,试试看做这题:
char a[]="abcdef";
char b[]="abcdef";
const char c[]="abcdef";
const char d[]="abcdef";
char *e="abcdef";
char *f="abcdef";
const char *g="abcdef";
const char *h="abcdef";
问题:
a,b地址是否相等?
c,d地址是否相等?
e,f地址是否相等?
g,h地址是否相等?

答案:
a!=b;
c!=d;
e==f;
g==h;

解答:
e,f,g,h都是指针,指向常量区的字符串,该字符串在内存中的地址是固定的。
a,b,c,d都是数组,在程序执行时,从常量区拷贝数据到栈中,每个数组的在栈中都会被分配地址。

参考:

(100条消息) C:有关指针的经典笔试面试题_Evan_ZGYF丶的博客-CSDN博客_指针返回 经典面试题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值