C语言中的* 简单记忆方法

       在刚开始学C语言的时候,老师是这么教我的 :*是指针,**是指向指针的指针。int* p 的意思是p是一个指针,存放的内容是一个int类型……这些大概是书上对*的解释,最基本的例子是 int* p; *p = 1;  在输出*p会得到 1。我到现在还是感觉奇怪的很。

       这里不想和细致的研究这些问题,只是想说说大概怎么使用*这个东西。其实在用C去解决一些算法问题的时候只要记住关于*的下面两个使用方法就足够了。

*与数组

       动态一维数组

       int* data = (int*) malloc (sizeof(int) * size); size是你想动态申请的数组元素个数。

       动态二维数组

       int** data = (int**) malloc(sizeof(int*) * row );//row是行数

       for(int i = 0 ; i < col ;i++)

{

       data[i] = (int*) malloc(sizeof(int) * col)  //col是列数

}

方便记忆

       1.读,int* 直接读成 int数组,int**则读成数组的数组  = 二维数组。

        2.同,malloc前面的强制类型转换和前面相同

        3.降级,sizeof里的参数永远比前面少一个*。(我现在写程序的时候确实是这么想的,不会去从什么地址之类的考虑)

 

*与&

  我学习的时候是用一句话去记的,*(星)是按图索骥,&是取地址。

 什么是按图索骥?图就是一个变量的地址,*的作用是根据一个地址去取值,大概的意思就像按图索骥。

&任何一个标识符,会得到程序为这个标识符分配的地址。

### C语言运算符优先级记忆口诀 为了更好地理解和记住C语言中的运算符优先级,可以采用以下简单易记的口诀: #### 单算移关与异或逻条赋 - ****:单目运算符如逻辑非 `!`、按位取反 `~`、自增 `++` 和自减 `--` 等具有最高优先级[^2]。 - ****:算术运算符包括乘法 `*`、除法 `/` 和求余 `%` 的优先级高于加法 `+` 和减法 `-`。 - ****:按位左移 `<<` 和右移 `>>` 属于较低级别的操作,在处理二进制数据时需要注意其位置。 - ****:关系运算符用于比较数值大小,例如大于 `>` 或小于 `<`,这些通常位于中间层次并先于相等性测试执行。 - ****:按位与 `&` 是一种组合两个值的方式,它比某些其他布尔表达式的部分更早发生作用。 - ****:按位异或 `^` 接下来发挥作用,这有助于创建独特的模式而不改变原始输入的状态太多。 - ****:按位或 `|` 则允许更多可能性通过设置特定比特来实现功能扩展。 - ****:逻辑运算符分为两种——逻辑与 `&&` 和逻辑或 `||`。前者会阻止短路评估直到满足条件为止;后者只要有一个真就返回真。 - ****:三元条件运算符 `?:` 提供了一种简洁的方式来编写简单的if-else语句结构。 - ****:最后是各种形式的赋值运算符,它们用来给变量分配新值,并且总是拥有最低的有效范围之一。 这种顺序可以帮助程序员快速判断不同类型的运算符之间的相对重要性和应用时机。此外,值得注意的是逗号 `,` 运算符也存在但它的优先级非常低,几乎总是在所有其它运算之后才被考虑。 ```cpp // 示例代码展示如何利用上述原则理解复杂表达式的结果 int a = 5; int b = ++a * (7 % 3); // 此处 '++' 比 '*' 更高优先级,所以先计算前缀增量再做乘法 printf("%d\n", b); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值