C语言中指针中的值赋值给数组
2023-09-11 14:17:11 时间
如果把各种语言做个冷兵器类比的话,C语言一定是刀客的最佳工具.入门很简单,但是要是能把它熟练运用,那就是顶尖级别的高手了.
用了那么多年的C语言,发现自己还是仅仅处于熟练的操作工.今天遇到了一个bug,就是和指针的赋值有关系.请看代码:
1 #include <stdio.h> 2 3 static int array[2]; 4 int main() 5 { 6 7 int *ptest = NULL; 8 9 ptest = (int*)malloc(2*sizeof(int)); 10 11 ptest[0] = 32767; 12 ptest[1] = -32767; 13 14 array = ptest; 15 printf("val1:%d val2:%d \n",array[0],array[1]); 16 17 return 0; 18 19 } 20 ~
各位看官,能否看到这个代码的问题吗?
其实,这段代码有个严重的问题,就是把指针的地址指向了数组的地址,就是把一个值打算放到两个地址中,这个是肯定不对的了.让在复杂的代码丛林中,没有意识到这个用法时候,那就很容易把指针混为一体.
假如array是个指针的话,那这份代码九对了.
正确的写法如下所示:
1 #include <stdio.h> 2 3 //static int array[2]; 4 int *array= NULL; 5 int main() 6 { 7 8 int *ptest = NULL; 9 10 ptest = (int*)malloc(2*sizeof(int)); 11 12 ptest[0] = 32767; 13 ptest[1] = -32767; 14 15 array = ptest; 16 printf("val1:%d val2:%d \n",array[0],array[1]); 17 18 return 0; 19 20 }
对C语言基本功的训练,看来不能松懈啊.
相关文章
- C语言中的宏展开
- C语言动态二位数组雏形
- C语言中的一维动态数组雏形
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
- 《C语言程序设计与实践(第2版)》——1.2 计算机与程序设计
- 【转】关于C语言生成不重复的随机数
- Android JNI编程(四)——C语言多级指针、数组取值、从控制台输入数组
- C语言:数组指针
- C语言:数组(1)
- 《数据结构与算法 C语言版》—— 2.4典型例题
- 《C语言解惑》—— 2.7 别混淆字符数组和字符
- (第11列)C语言练习:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。五步带你解决。
- C语言 | 为什么定义一个二维数组,行数可以省略,列数不可以
- C语言编译器不检查数组下标越界
- C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理
- C语言学习及应用笔记之五:C语言typedef关键字及其使用
- C语言函数及数组的综合应用——儿童数学运算 and 递归求最大公约数
- C语言循环结构及数组排序的综合应用——冒泡、插入、选择排序棒图显示and两个超长数相乘
- 在C语言中,数组是不能递增的
- 【C语言进阶】指针进阶的详细讲解--(数组指针、指针数组、函数指针、函数指针数组、指向函数指针数组)
- C语言--------一些指针和数组的题目解析
- 嵌入式C语言中用到的字符数组和字符指针再次总结
- 归并排序(递归)——C语言实现
- C语言运算符优先级表
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C语言字符操作函数
- C语言中的宏