📄 009.htm
字号:
/*将回车符赋给a2*/
<BR> .
<BR> .
<BR> .
<BR> }
<BR>
<P> (3) 指针型变量
<BR> 例如:
<BR> main()
<BR> {
<BR> int *i;
<BR> char *str;
<BR> *i=100;
<BR> str="Good";
<BR> .
<BR> .
<BR> .
<BR> }
<BR> *i表示i是一个指向整型数的指针, 即*i是一个整型变量,
i是一个指向该整型
<BR>变量的地址。
<BR> *str表示str是一个字符型指针, 即保留某个字符地址。在初始化时,
str没有
<BR>什么特殊的值, 而在执行str="Good"时, 编译器先在目标文件的某处保留一个空间
<BR>存放"Good\0"的字符串, 然后把这个字符串的第一个字母"G"的地址赋给str,
其中
<BR>字符串结尾符"\0"是编译程序自动加上的。
<BR> 对于指针变量的使用要特别注意。上例中两个指针在说明前没有初始化,
因此
<BR>这两指针为随机地址, 在小存储模式下使用将会有破坏机器的危险。正确的使用办
<BR>法如下:
<BR> 例如:
<BR> main()
<BR> {
<BR> int *i;
<BR> char *str;
<BR> i=(int*)malloc(sizeof(int));
<BR> i=420;
<BR> str=(char*)malloc(20);
<BR> str="Good, Answer!";
<BR> .
<BR> .
<BR> .
<BR> }
<BR> 上例中, 函数(int*)malloc(sizeof(int))表示分配连续的sizeof(int)=2个字
<BR>节的整型数存储空间并返回其首地址。同样(char*)malloc(20)表示分配连续20
个
<BR>字节的字符存储空间并返回首地址(有关该函数以后再详述)。由动态内存分配函数
<BR>malloc()分配了内存空间后, 这部分内存将专供指针变量使用。
<BR> 如果要使i指向三个整型数, 则用下述方法。
<BR> 例如:
<BR> #include<alloc.h>
<BR> main()
<BR> {
<BR> int *a;
<BR> a=(int*)malloc(3*sizeof(int));
<BR> *a=1234;
<BR> *(a+1)=4567;
<BR> *(a+2)=234;
<BR> .
<BR> .
<BR> .
<BR> }
<BR> *i=1234表示把1234存放到i指向的地址中去, 但对于*(i+1)=4567,
如果认为
<BR>将4567存放到i指向的下一个字节中就错了。Turbo C2.0中只要说明i为整型指针,
<BR>则 (i+1) 等价于 i+1*sizeof(int)
<BR>同样 (i+2) 等价于 i+2*sizeof(int)
<BR>
<P> 2. 数组变量的赋值
<BR> (1) 整型数组和浮点数组的赋值
<BR> 例如:
<BR> main()
<BR> {
<BR> int m[2][2];
<BR> float n[3];
<BR> m[0][0]=0, m[0][1]=17,
m[1][0]=21;/*数组元素赋值*/
<BR> n[0]=109.5,
n[1]=-8.29, n[2]=0.7;
<BR> .
<BR> .
<BR> .
<BR> }
<BR>
<P> (2)字符串数组的赋值
<BR> 例如:
<BR> main()
<BR> {
<BR> char s[30];
<BR> strcpy(s, "Good
News!"); /*给数组赋字符串*/
<BR> .
<BR> .
<BR> .
<BR> }
<BR> 上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留
<BR>出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strcpy
为
<BR>Turbo C2.0的函数)时, 首先在目标文件的某处建立一个"Good News!\0" 的字符串。
<BR>其中\0表示字符串终止, 终止符是编译时自动加上的, 然后一个字符一个字符地复
<BR>制到s所指的内存区域。因此定义字符串数组时, 其元素个数至少应该比字符串的
<BR>长度多1。
<BR> 注意:
<BR> 1. 字符串数组不能用"="直接赋值, 即s="Good News!"是不合法的。所以应分
<BR>清字符串数组和字符串指针的不同赋值方法。
<BR> 2. 对于长字符串, Turbo C2.0允许使用下述方法:
<BR> 例如:
<BR> main()
<BR> {
<BR> char s[100];
<BR> strcpy(s, "The
writer would like to thank you for"
<BR>
"your interest in his book. He hopes you"
<BR>
"can get some helps from the book.");
<BR> .
<BR> .
<BR> .
<BR> }
<BR>
<P> (3)指针数组赋值
<BR> 例如:
<BR> main()
<BR> {
<BR> char *f[2];
<BR> int *a[2];
<BR> f[0]="thank
you"; /*给字符型数组指针变量赋值*/
<BR> f[1]="Good Morning";
<BR> *a[0]=1, *a[1]=-11;
/*给整型数数组指针变量赋值*/
<BR> .
<BR> .
<BR> .
<BR> }
<BR>
<P> 三、数组与指针
<BR> 数组与指针有密切的联系。数组名本身就是该数组的指针,
反过来, 也可以把
<BR>指针看成一个数组, 数组名和指针实质上都是地址, 但是指针是变量, 可以作运算。
<BR>而数组名是常量, 不能进行运算。
<BR> 例如:
<BR> main()
<BR> {
<BR> char s[30],
*p; /*定义字符型数组和指针变量*/
<BR> p=s;
/*指针p指向数组s的第一个元素s[0]的地址*/
<BR> .
<BR> .
<BR> .
<BR> *(p+8);
/*指针p指向数组s的第9个元素s[8]的地址*/
<BR> .
<BR> .
<BR> .
<BR> }
<BR> 由上例可以看出数组和指针有如下关系:
<BR> (p+i)=&(s[i])
<BR> *(p+i)=s[i]
<BR> 因此, 利用上述表达式可以对数组和指针进行互换。两者的区别仅在于:
数组
<BR>s是程序自动为它分配了所需的存储空间; 而指针p则是利用动态分想函数为它分配
<BR>存储空间或赋给它一个已分配的空间地址。
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" bgcolor="#e0e0e0"><strong><A HREF="010.htm">后一页</A><BR>
<A HREF="008.htm">前一页</A><BR>
<A HREF="index.html">回目录</A><BR>
<A HREF="../../../../index.htm">回首页</A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -