009CC++C语言字符数组和普通数组的区别

Python028

009CC++C语言字符数组和普通数组的区别,第1张

实际上,字符数组和普通数组一样,没有本质区别。请大家注意数组类型的含义:数据类型指的是数组所包含的元素的类型,而不是数组名的类型,数组名永远是一个指针,指向第一个元素的地址,即数组首地址。字符数组的每个元素都是char类型,整型数组的每个元素都是int类型。scanf() 和 printf() 函数有一种格式化字符串 %s 可以用来整体输入输出字符数组,但是没有特定的格式支持 int 数组整体数组输出。请看下面的代码:

#include<stdio.h>

intmain(void){

intnum[]={1,2,3,4,5,6,7,8,9,0}

charstr[]="http://see.xidian.edu.cn/cpp/"

inti

// num, str 是地址,由系统分配,与数组本身没有任何关系

printf("num = %d, str = %d\n",num,str)

// num, str 指向数组首地址

printf("&num[0] = %d, &str[0] = %d\n",&num[0],&str[0])

// num 等价于 &num[0]

if(num==&num[0]){

printf("num = &num[0]\n")

}

// str 等价于 &str[0]

if(str==&str[0]){

printf("str = &str[0]\n")

}

// 要为某个数组元素赋值,必须取该元素的地址

printf("input a number: ")

scanf("%c",&str[0])

// scanf() 从 stdin 缓冲区读取数据

// fflush() 用来清空缓冲区,让 scanf() 重新从控制台读取

// 关于 fflush() 详细解释请查看:

C语言fflush()

fflush(stdin)

printf("input a char: ")

scanf("%c",&str[0])

fflush(stdin)

// 使用 scanf() 为数组赋值时

// 可以使用 %s 为字符数组整体赋值

// 但是没有特定的格式化字符串来为 int数组整体赋值,必须一个一个赋值

printf("Input a string: ")

scanf("%s",str)// str为地址,不需加&

fflush(stdin)

printf("Input 10 number: ")// 以空格为间隔

for(i=0i<10i++){

scanf("%d",&num[i])// num[i]为某个元素,必须要加&取得它的地址

}

// 取前5个元素作为示例

printf("The final num[] = %d, %d, %d, %d, %d\n",num[0],num[1],num[2],num[3],num[4])

printf("The final str[] = %s\n",str)

return0

}

运行结果:num = 1638176, str = 1638164&num[0] = 1638176, &str [0] = 1638164num = &num[0]str = &str[0]input a number: 5↙input a char: e↙Input a string: C语言中文网↙Input 10 number: 12 34 56 78 90 23 45 78 09 54↙The final num[] = 12, 34, 56, 78, 90The final str[] = C语言中文网再强调一次,数组类型是数组元素的类型,数组名是指向数组首地址的指针,scanf() 的参数列表必须是指针。

#include<stdio.h>

int f1(int x)

{

int r=1,ans=0

while(x>0)

{

x/=10

ans++

}

for(int i=1i<=ansi++)

r*=10

return r

}

int main()

{

for(int i=1i<=20000i++)

{

int k=f1(i)

if(i*10/k>1) i=k*10

int n1=i*10+6,n2=k*6+i

if(n1*4==n2) printf("%d %d\n",n1,n2)

}

return 0

 }