
对于数组
int arr[]={1,2,3,4};可以用len=sizeof(arr)/sizeof(int);得到其大小len。字符数组(一定是以\0结尾的)除了上面那个方法外,还可以通过指针
用循环判断一下
int len=0;
while (p != '\0')
++len;
一般来说,不能用指针去判断数组到底有多少个元素
main()
{
int a[2][2];
int array = (int )malloc( 2 sizeof(int ) );
int k=0;
int i=0,j=0;
for (;k<2;k++)
array[k] = (int )malloc( 3 sizeof(int) );
for(k=0;i<2;i++)
for(;j<3;j++,k++)//上面虽然j=0了,但是别忘了这个是循环,内循环结束后进入第二次外循环,j还符合条件吗
array[i][j]=k;
for(k=0;i<2;i++)//这里i已经是2了,怎么可能打印得出
for(;j<3;j++,k++)//这里也是
printf("%d\t",array[i][j]);
}int p[5];是指针数组,存放的都是地址,比如五个变量
的地址,或五个数组的首地址等。
int (p)[5];是数组指针,是指向一个有五个元素的一维数组,初始化是肯定的,但应该用含五个元素的一维数组地址初始化比较合理,
当然也可以用malloc来初始化(int)malloc(2 sizeof(int))但这样得到的类型是不配置的,因为这里p的类型是int()[5]
在较高版本的VC中应该是报错,而不是警告
char str[100];
char pi=str; //相当于char pi ;pi=str;
char ppi=pi;//这个地方抄错了。应为char ppi=&pi;
定义加表明这是指针类型的变量
用的时候,就是用的指针,加干什么。
只有取指针所指变量的值,或给指针所指的变量赋值的等涉及指针所指的变量的时候,
才会又加号,表示获取或改变,指针所指变量的值。
char x=10;
pi =x; //给指针所指的变量赋值,改变指针所指变量的值(改变pi) 。
x=pi; //取指针所指的值,取指针pi所指的变量的值(表示为pi)赋值给x。
对于函数:int find(int a[], int value),其中a为整型数组首地址,value是被检验值。我们可以利用指针a间接引用数组第一个元素的值,并将其与value比较,比较完后,将指针向后移动,再通过间接引用的方式比较下一个元素值,依次下去,直到在整型数组中找到被检验值或者整型数组所有元素比较结束为止。
那么这里有个问题,我们如何通过指针知到整型数组什么时候结束呢?对于整型数组而言,没有办法,所以我们必须先知道整型数组的长度,可以在参数中给出,也可以在主函数定义中知晓。
程序如下:
int find(int a[], int value)
{
int i=0,p=a;
for(i=0;i<=9;i++)
{
if(p==value)
return p;
else
p++;
}
if(i>=10)
return 0;
}
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0};
int n;
scanf("%d",&n);
printf("%x %d",find(c,n),(find(c,n)));/第一个为函数返回地址,第二个为函数返回地址里的值/
getch();
}
另外,我们测试一个程序或者函数是否正确不在于其能否正确运行,而在于其运行的结果是否符合我们的预期。针对上述程序,测试方法如下:
输入任意一个数,如果这个数在数组C内,看是否能够打印出16进制的地址数和与输入值相同的数;如果不在数组C内,看是否返回值为0的地址。
#include <stdioh>
void test()
{
int point[2];
int temp_o = 10;
int temp_t = 20;
point[0] = &temp_o;
point[1] = &temp_t;
int point_t = point; //这里该这么写
printf("%d\n",point_t[1]);//不可能是point_t[2]吧,应该只有到point_t[1]
printf("%d\n",point_t);//为啥可以,不过不能再加括号了
}
int main()
{
test();
}


评论列表(0条)