C语言中的一个*和[]优先级问题

最近写着玩了这么一段代码

 1 int Init(int **T, int v1, int v2, int v3)
 2 {
 3
 4   if (!(*T=(int*) malloc(3*sizeof(int))))
 5     exit(-1);
 6
 7   *T[0]=v1, *T[1]=v2, *T[2]=v3;
 8
 9   return 0;
10 }

结果执行的之后一直报错Segmentation fault

后来排查到问题就来自于上面代码的第7句的赋值语句,像上面那样写是错的,因为[]的优先级是要高于*(是指针地址取值,不是乘法,乘法运算符的优先级更低)

时间: 2024-11-17 17:47:47

C语言中的一个*和[]优先级问题的相关文章

c语言中结构体指针

1.指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符"->". 举例说明: struct SunLL { int a; int b; int c; }; struct SunLL  * p;               //定义结构体指针 struct SunLL A = {1,2,3};    //定义一个SunLL类型的变量A

C语言中的函数、数组与指针

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原型

黑马程序员--C语言中的指针(5)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指针型函数 前面我们介绍过,所谓函数类型是指函数返回值的类型. 在C语言中允许一个函数的返回值是一个指针(即地址), 这种返回指针值的函数称为指针型函数. 定义指针型函数的一般形式为: 类型说明符 *函数名(形参表) { …… /*函数体*/ } 其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针.类型说明符表示了返回的指针值所指向的数据类型. 如: int *ap(int 

C语言中边界计算与不对称边界(二)

尽管C语言的数组会让新手感到麻烦,然而C语言中数组的这种特别的设计正是其最大优势所在.要理解这一点,以下是一些简单解释. 在所有常见的程序设计错误中,最难于察觉的一类是"栏杆错误",也常被称为"差一错误"(off-by-one error).例如这个问题:100英尺长的围栏每隔10英尺需要一根支撑用的栏杆,一共需要多少根栏杆呢?如果不加思索,大家会容易以为是100除以10,即为10根.其实,真正需要的是11根. 因为支撑10英尺长的围栏实际需要2根栏杆,即两端各一根

C语言中的边界计算与不对称边界(一)

1.如果一个数组有10个元素,那么这个数组下标的允许取值范围是什么呢? 这个问题对于不同的程序设计语言有着不同的答案.例如,对于Fortran,PL/I以及Snobol4等程序语言,这个数组的下标取值缺省从1开始,而且这些语言也允许编程者另外指定数组下标的起始值.而对于Algol和Pascal语言,数组下标没有缺省的起始值,编程者必须显式的指定每个数组的下界与上界.在标准的Basic语言中,声明一个拥有10个元素的数组,实际上编译器分配了11个元素的空间,下标范围从0到10. 在C语言中,这个数

C语言中标识符声明的几个关键字总结

C语言中声明一个名称就是把一个标识符与某个C语言对象相关联,如变量.函数或类型,C语言中可以声明的名称包括:变量.函数.类型.类型标志.结构成员与联合成员.枚举常量.语句标号和预处理器宏.除了语句标号和预处理器宏之外,所有标识符都在C语言声明中声明,变量.函数.类型放在声明的声明符中,类型标志.结构成员与联合成员和枚举常量在声明的某种类型说明符中声明,语句标号在C语言函数中出现时声明,而预处理器宏用#define预处理器命令声明. 如下列声明: extern const volatile uns

C语言中的运算符优先级

C语言中的运算符优先级问题,一般是不要求我们记的,但如果能记住,对快速理解代码和编程是有很大帮助的:若能快速记住,何乐而不为呢? 如果你喜欢,建议先下载我整理的运算符优先级pdf文档(http://download.csdn.net/detail/n289950578/7964209),对照一起看,更有助于理解. 1.优先级: 为了理解方便,将优先级分为六大类,速记为<非123赋>: 非运算符  () [] . ->: 单目运算  (!&* 右->左): 双目运算  (左-

c语言中如何设计和编写一个应用系统?

C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如"Hello"是 #include.h> int main() { printf("Hello\\n"); } 从键盘接收一个字符串然后显示是 #include.h> int main() { char a[10]; scanf("%s",&

汇编语言的寻址方式与C语言中的指针是一个东西。

汇编语言的寻址方式与C语言中的指针是类似的! 汇编语言的寻址方式与C语言中的指针:寻找数据的方法. 指针就是存了 变量的地址,寻址方式就是得到保存变量的地址. 当你学了汇编语言,你就知道为什么C语言有函数指针,为什么函数要以return 结尾.为什么main()函数为程序的入口. 给我的感觉就是C语言是汇编语言的进化版本.因为C语言处处都有着汇编语言的影子. 一个小小的建议:先学习汇编语言.自学书籍是 清华大学 王爽的 汇编语言.之后,学习C语言,自学书籍,我还真不好推荐,我用的是C语言入门经典