一些C语言必会的知识点

文章解释了const修饰指针的不同情况,包括const放在*左边和右边的区别,以及在结构体、数组和字符数组中的应用实例,强调了内存偏移的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//说出下列代码含义,有什么区别
const char *p;
char const*p;
char*const p;

我们都知道const修饰变量,这个变量就不能修改!那const修饰指针变量呢?

const修饰指针变量有两种情况

1:const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来修改

。但是指针变量本身的内容可变。

2:const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。

int main()
{
    int n = 10;
    int m = 19;
    int *p = &n;
    *p = 20;//通过指针修改指针指向的内容
    p = &m;//改变指针变量本身
}


//所以
const char *p 
char const *p 
char * const p
//第一个和第二个const都放在*的左边,所以不能通过*p来改变,可以通过&p改变指针变量本身的内容
//第三个const在*右边,所以能通过*p来改变,不可以通过&p改变指针变量本身的内容

//看下面代码,32位机下计算各个值(这些问题答错,面试基本不会通过,说明基本功差)
struct A {
    int  i;
    char j;
};

A a;
A* pa = &a;

sizeof(a) = 8
sizeof(pa) = 4
//a是结构体的大小,存在内存偏移
//pa是指针变量,在32位机下4个字节,64位下8个字节
int arr[8];
int* parr = arr;

sizeof(arr) = 32 //数组的大小
sizeof(arr[0]) = 4 //第一个的大小
sizeof(parr) = 4 //指针变量的大小


char sz[] = "helloworld";
char* psz = sz;

sizeof("helloworld") = 11//有\0
sizeof(sz) = 11//有\0
sizeof(psz) = 4//指针变量的大小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值