c语言,求解惑

Python024

c语言,求解惑,第1张

一维指针和一维数组可以等同。 但是二维指针和二维数组不能等同 不能直接p=a

因为在取p[i][j]的时候

会这样做 *(*(p+i) + j)

这样先将p偏移i个单元,取值, 取到的是数组a里面的某个值,而不是一个地址。

这个代码 最简单的改法,不是你注释里面的改法,而是

#include<stdio.h>

#include <stdlib.h>

void main()

{

int **p,a[3][3]

int i,j

p=(int **)malloc(3*sizeof(int*))//这里用sizeof(int*)而不是int

for (i=0i<3i++)

    p[i]=a[i]//将每行的首地址赋值给动态数组p的一个元素。 

for (i=0i<3i++)

for (j=0j<3j++)

{p[i][j]=i+j

printf("%d",p[i][j])}

}

首先,程序有一个问题,main函数未返回,应在最后一行添加"return 0"

言归正传,"学号"的类型是int,意味着可以是8,10,16进制,十进制没有什么特征,但有一个规范,16进制以0x开头,8进制以0开头,所以:

0010是八进制10,也就是十进制8,

0023是八进制23,也就是十进制19

0020是八进制20,也就是十进制16,

"1"开头就不会有问题,但改成"01"就变成八进制,

如果非想用0开头,把num改为字符数组类型,0010,0023,0020放引号里

#include <stdio.h>

#define M 100

void arrout (int * ,int)

int arrin (int *)

void main()

{

int s[M],k

k=arrin (s)

arrout(s,k)

}

int arrin (int *a)

{

int i,x

i=0

scanf("%d,&x")

while (x>0)

{

*(a+i)=x

i++

scanf("%d",&x)

}

return i

}

void arrout (int *a,int n)

{

int i

for(i=0i<ni++)

printf(((i+1)%5==0)? "%4d\n":"%4d",*(a+i))//?条件语句写有一些问题

printf("\n")

}

错误有两处,修改一下编译通过~

1 条件语句写有一些问题

2 main函数默认有返回值