•
阅读 27因为
编号占用的空间满了,没有\0的存放处。在昌困纳观耐没察窗口的输出,仍然是以\0为结尾的,结尺誉构体中编号和书名相邻,书名的\0被当成了编号的结尾\0.这是很危险的。这同编译器有关。
对c / c++ 而言,方括号 是特殊的运算符,非标点符号。例如: x[i] 等于 *(x+i) 也等于 i[x] (很奇怪,但100%正确
)
你试验一下
程序
:
int x[3]={1,2,3}
printf("x:\n")
for (i=0i<3i++) printf("%d ", i[x]) (很奇怪,但100%正樱裂确)
axis[4][x] 在c / c++ 就是: *(*(axis+4)+x)
同样: axis[5][x]、axis[6][x]、可以正常使用,但很可能有运行时的错误发生,程序物颂渣垮掉。
看程序:
#include <stdio.h>罩悄
int main(){
float axis[4][9]
int i,j,v=1,x
for (j=0j<4j++) for (i=0i<9i++) *(*(axis+j)+i) = v++//正确
for (j=0j<4j++) {
for (i=0i<9i++) printf("%2.0f ",axis[j][i]) //正确
printf("\n")
}
printf("\n")
for (x=0x<9x++) axis[4][x]=v++
printf("\n")
for (x=0x<9x++) printf("%2.0f ",*(*(axis+4)+x))
printf("\n")
return 0
}
程序垮掉 是 地址运算溢出引起,就如普通程序,编译通过,计算溢出一样。
给份完整答案,已调试过
Dim ar(20) As Integer, i As Integer, j As Integer
For i = 0 To 19
ar(i) = CInt(Rnd() * 100)
Next
Dim br(100) As Integer, str As String
Dim cr(20) As Integer
cr = ar '将一个数组判迟ar赋给另一个数组cr
For i = 0 To 19
For j = i To 19
If ar(j) < 0 Then
Exit For
End If
If ar(i) = cr(j) Then
br(ar(i)) = br(ar(i)) + 1
cr(j) = -ar(i)
End If
Next
ar(j) = -ar(i)
cr(i) = -ar(i)
Next
Array.Sort(ar)
For i = 0 To 19
If str = "" Then
str = ar(i) & "有" & br(ar(i)) & "掘饥李个"
Else
str = str & " " & ar(i) & "有肢告" & br(ar(i)) & "个"
登录
后才能评论