shell变量与C语言变量之间在用法上有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell变量与C语言变量之间在用法上有啥区别相关的知识,希望对你有一定的参考价值。
参考技术A C语言变量有确定的类型,一般需要初始化,否则值是不确定的。未经特别声明,默认作用域是局部的(局部变量)。shell变量类型不固定,赋值为什么类型的数值,它就是什么类型的。可以不初始化,后面用的时候直接赋值,问题不大。shell变量在脚本中默认都是全局变量。 参考技术B 《UNIX 超级工具》一书 第八章
8.05 命令行的评价(evaluation)
下面是C shell 解释命令行的顺序:
1. 历史替换
2. 分裂词(包括特殊字符)
3. 更新历史表
4. 解释单引号(') 和 双引号(")
5. 别名替换
6. 输入和输出的重定向(如 > < 和 |)
7. 变量替换
8. 命令替换
9. 文件名扩展
(Bourne shell 的解释顺序本质上是一样的,除了它不执行历史替换和别名替换之外)
结构体指针与结构体变量用作函数参数时有啥区别,在用法上
参考技术A结构体指针与结构体变量用作函数参数区别:
(1)结构体指针作为函数参数时,调用时传递的是指向一个结构体变量的指针(即结构体变量的地址);结构体变量作为函数参数时,调用时传递的结构体变量本身。
(2)以下代码显示了调用时的区别
#include <stdio.h>
/* 定义结构体类型Point */
typedef struct
int x;
int y;
Point;
void fun1(Point point)
point.x += 10;
point.y += 10;
void fun2(Point pPoint)
pPoint->x += 10;
pPoint->y += 10;
void main( )
Point p;
p.x = 100;
p.y = 200;
/* 调用 fun1 */
fun1( p );
printf("x=%d, y=%d\\", p.x, p.y);
/* 调用 fun2:取p的地址作为参数 */
fun2( &p);
printf("x=%d, y=%d\\", p.x, p.y);
程序的输出为:
x=100, y=200
x=110, y=210
(3)观察上面程序运行的结果发现 fun1函数执行后,p并没发生变化;而调用fun2后,p却改变了。这是因为:调用fun1时,所传递的参数p被复制到调用堆栈中,fun1函数所操作是堆栈中的变量而不是原来的那个变量(main中的p);另一方面,调用fun2时,传入的p的地址,fun2通过地址,修改了main中的变量p。这是结构体指针与结构体变量用作函数参数最大的区别。
一个结构体A,当它的指针作为参数传入函数func,那么在func中可以通过指针改变结构体的值,函数返回后,结构体的值被改变; 但是,当结构体变量作为参数传入函数func时,在func函数中即使对他进行了修改,当函数返回时,结构体本身并没有改变,因为修改的只是他的一个副本。
扩展资料
一、用结构体变量和指向结构体变量的指针构成链表
1、链表是一种常见的重要的数据结构。
2、链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。
二、链表中的每一个元素称为“结点”,每个结点都应包括两个部分:
1、是用户需要用的实际数据,
2、是下一个结点的地址。
三、可以看到链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。
四、可以看到,这种链表的数据结构,必须利用结构体变量和指针才能实现。
五、可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。
参考资料来源:百度百科-结构体类型
以上是关于shell变量与C语言变量之间在用法上有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
matlab中的num2str函数和char函数在用法上有啥本质区别呀?