📄 24.htm
字号:
. <br>
. <br>
. <br>
} </p>
<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) </p>
<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>
} </p>
<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>
} </p>
<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>
} </p>
<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>
存储空间或赋给它一个已分配的空间地址。
</p>
<p> <br>
</p>
</td>
</tr>
</table>
</center></div><div align="center"><center>
<table border="0" cellspacing="1" width="640">
<tr>
<td class="p9" height="60"> <script>document.write("<p><a href=\"http://view.gznet.com/cgi-bin/rl_views.cgi?UID=10013421\" target=sxrl>");
document.write("<img src=\"http://refer.gznet.com/cgi-bin/rl_refer2.cgi?UID=10013421&refer="+escape(top.document.referrer)+"\" width=1 height=1 border=0 alt=\" \">");
document.write("</a>");
</script></td>
</tr>
</table>
</center></div>
<p> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -