导航:首页 > 源码编译 > c编译器对数组的处理

c编译器对数组的处理

发布时间:2022-07-18 17:57:52

① C语言数组的问题

大部分编译程序在编译的时候就把sizeof计算过了,所以main函数中的sizeof(arry)其实就是20,即5个int型数据所占的空间,而函数中的arry编译器编译时认为它是指针型数据,所以就会得到2。

与sizeof不同,strlen这个函数是在运行时计算的,但是只能处理char型数组,所以我把你的代码修改了一下:

#include <stdio.h>
#include <string.h>
int q_sort(char arry[]);
int main()
{
char arry[]={2,3,4,5,6};
int len=(sizeof(arry)/sizeof(arry[0]));
printf("%d ",len);


q_sort(arry);
return 0;
}


int q_sort(char arry[])
{
int len=(strlen(arry));
printf("%d",len);
}

注意:

  1. strlen返回值就是字符串的长度而不是占用空间大小。

  2. strlen的参数是char*,即char型变量的指针。

由于strlen是在运行时计算的,所以最后的输出与main函数相同也是5。

所以问题的关键就是:

大部分编译程序在编译的时候就把sizeof计算过了,并直接替换成(可以这么理解)类型或是变量的长度。这就是sizeof(x)可以用来定义数组维数的原因 :
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;


希望能帮到你

② C语言中怎样实现对数组数据的删除、修改

#include<stdio.h>
typedef struct Node{
int a,b;
}node;
node c[100];
int n;
void print(){
int i;
printf("\n当前数据:\n");
for(i=1;i<=n;i++){
printf("第%d组:a=%d,b=%d\n",i,c[i].a,c[i].b);
}
printf("\n\n");
}//输出
void setnum(){
int i;
printf("输入n,表示共有n组数据:\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("输入第%d组数据的两个值a、b,用空格隔开:\n",i);
scanf("%d%d",&c[i].a,&c[i].b);
}
}//设置数据
void remove(){
int i,j;
printf("输入i,表示要删除第i数据:\n");
scanf("%d",&i);
for(j=i;j<=n-1;j++){
c[j]=c[j+1];
}//循环覆盖,让后一个覆盖前一个,所以j最大值取n-1
n--;//结构体中的元素减少1个
}//删除数据
void chang(){
int i,aa,bb;
printf("输入i,a,b,表示要将第i组数据修改成a、b:\n");
scanf("%d%d%d",&i,&aa,&bb);
c[i].a=aa;
c[i].b=bb;//直接赋值修改
}//修改数据
main(){
int m;
while(1){
printf("输入:1-输入数据,2-修改数据,3-删除数据\n 4-输出数据,0-退出\n");
scanf("%d",&m);
if(m==0) break;
else if(m==1) setnum();
else if(m==2) chang();
else if(m==3) remove();
else if(m==4) print();
}
}

③ c语言中子函数对数组的操作

数组作为子函数形参的时候,是被当做指针处理的,也就是说
你这样写一个子函数
int a(int a[]) ;

等价于
int a(int *a) (其实编译器是这么处理的)你可以看汇编代码!

④ c语言数组怎么清零

c语言不能对这个数组赋值,只能通过遍历数组达到给数组中每个元素赋值的目的。初始化的时候可以用inta[4]={0};这样给整个数组元素赋值为0,若想给已初始化的数组清零,也只能遍历数组。

在C语言中,所谓的“清空”,意思是“无视里面的数据”,而不是“让里面没有数据”。有时候可能需要把一个数组清零,意思是全部数据都用0填充,可以用库函数来实现。假设数组名为a,无论什么类型也无论几维都一样,可以写成memset(a,0,sizeof(a));

(4)c编译器对数组的处理扩展阅读:

在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持,但是支持的编译器不多,而且由于栈溢出的安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了。

⑤ c语言中怎样实现对二维数组元素进行赋值并输出。

用一个两重循环就可以了:
#include <stdio.h>
void main()
{int a[3][4] = {0}, row, col;

printf("请输入数组元素的值(3行4列): ");

for (row=0; row<3; row++)

for (col=0; col<4; col++)

scanf("%d", &a[row][col]);

printf("您输入的数组为: ");

for (row=0; row<3; row++){//输出当前行的元素

for (col=0; col<4; col++)

printf("%3d", a[row][col]);//换行

printf(" ");

}

}

(5)c编译器对数组的处理扩展阅读:

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

⑥ C语言 数组初始化为0 编译器是如何实现的

在编译时,变量分成两种形式存放,一种叫初始化段,一种叫未初始化段
如果你定义数组没有给出赋值语句中的初始值,该数组将保存在未初始化段;否则放入初始化段
编译器将记录初始化段中的数组起始地址、数据类型、元素个数,初始化数据在常量区的起始地址,数据个数
在程序运行时,系统先申请各段内存,然后针对初始化段进行初始化工作,方法是从常量段中取出初始化数据给你有初始值的变量赋值,假设你程序开设10个单元的数组,如果没有优化选项,常量段中将保存10个0用来初始化这个数组,如果有优化选项,可以合并相同常量,则仅保存一个0,并用这个0来初始化所有10个数组元素。

⑦ C++是如何处理数组名的

数组是聚合性数据结构,数组名有两个意义;
一个是数组的整体存储空间,一个是数组首字节的首地址;
这也就是说,对编译器来说数组名有两个实现;

一个是一个数据结构(整体存储空间),另一个是一个“常量指针”;
所以,C++处理指针的方式和C是一样的;

⑧ C语言如何对数组中的数据进行处理

类似下面简单处理下
#include"stdlib.h"
#include"stdio.h"
#include"string.h"

charrecord[100][5][16];
intcnt=0;
#defineIS_ALPHA(a)((a>='a'&&a<='z')||(a>='A'&&a<='Z')||(a>='0'&&a<='9')||(a=='_'))
char*get_record(char*str){
inti=0,j=0;
if(cnt>=100)returnNULL;
while(1){
if(IS_ALPHA(*str)){
if(j<15)
record[cnt][i][j++]=*str;
}
else{
if(j){
record[cnt][i][j++]=0;
j=0;
i++;
}
if(*str==0||i==5)break;
}
str++;
}
//addornot
if(i==5){
intn=cnt;
for(i=0;i<cnt;i++){
if(strcmp(record[i][0],record[cnt][0])==0&&
strcmp(record[i][1],record[cnt][1])==0){
if(atoi(record[i][4])<atoi(record[cnt][4])){
strcpy(record[i][4],record[cnt][4]);
}
n--;
break;
}
}
cnt=n+1;
}
return(*str?str:NULL);
}

voidprint_record(){
inti;
for(i=0;i<cnt;i++){
printf("%s%s%s%s%s ",
record[i][0],record[i][1],record[i][2],record[i][3],record[i][4]);
}
}

intmain(){
charstr[]="
DN100CDN_100123
DN100CDN_200216
DN100CDN_100106
DN100CDN_300106
DN100CDN_300107
DN100CDN_200218";
char*s=str;
while(s=get_record(s)){}
print_record();
return0;
}

⑨ 用C语言编译程序:数组的排序与查找

三个函数的实现如下:

int Lookup(int *a,int b,int &c)
{
int i=0;
c=0;
for(i=0; i<Size; i++)
{
if (a[i] == b)
{
c = i;
return 1;
}
}

return 0;
}

int Lookup(int *a,int Min,int Max ,int &b,int &c)
{
int i;
c = 0;
b = 0;
int count=0;
for (i=0; i<Size; i++)
{
if (a[i] < Min)
continue;
else if (a[i] <= Max)
{
if(0 == b)
{
b = i;
count=1;
}

c = i;
}
else
break;
}

return count;
}

void insert_sort(int *a)
{
int i,j,dataTemp;

cout<<"Input:";
for (i=0; i<Size; i++)
cin>>a[i];

for (i=0; i<Size-1; i++)
{
for (j=i+1; j<Size; j++)
if (a[i] > a[j])
{
dataTemp = a[i];
a[i] = a[j];
a[j] = dataTemp;
}
}

}

⑩ 在C语言,对数组有那些常用处理比如数排序等,请罗列下

数组并非用于处理排序的,需要排序一般使用单、双向链表来实现(当然链表也可以看成数组的)。
数组和申请一块内存存放数据没有本质区别,只是为了表述和写源代码方便。
你完全可以将一个数组看作是一个具有相同数据类型的的内存数据块。
但是他对写程序代码和描述逻辑实现很方便,比如可以利用数组下标变量来实现循环控制,快速存取数据等

阅读全文

与c编译器对数组的处理相关的资料

热点内容
喷油螺杆制冷压缩机 浏览:576
python员工信息登记表 浏览:374
高中美术pdf 浏览:157
java实现排列 浏览:511
javavector的用法 浏览:978
osi实现加密的三层 浏览:230
大众宝来原厂中控如何安装app 浏览:910
linux内核根文件系统 浏览:240
3d的命令面板不见了 浏览:521
武汉理工大学服务器ip地址 浏览:143
亚马逊云服务器登录 浏览:521
安卓手机如何进行文件处理 浏览:68
mysql执行系统命令 浏览:925
php支持curlhttps 浏览:142
新预算法责任 浏览:443
服务器如何处理5万人同时在线 浏览:247
哈夫曼编码数据压缩 浏览:424
锁定服务器是什么意思 浏览:382
场景检测算法 浏览:616
解压手机软件触屏 浏览:347