函数指针数组与数组分配
来源:互联网 发布:dw淘宝代码使用教程 编辑:程序博客网 时间:2024/06/18 07:34
用malloc这类函数时一定要检查返回值,否则可能会导致程序非正常终止:
float *vector = malloc(20 *sizeof(float));
if (vector == NULL) {
//malloc分配内存失败
}else{
//to do
}
后续malloc中为了简单起见,malloc分配都表示成功
typedef int(*FptrOperation)(int,int);
typedef int (*Operation) (int,int);
Operation operations[2] = {NULL};
//int (*Operation[2]) = {NULL}; 所有元素初始化为NULL
int add(int a,int b)
{
return a+b;
}
int subtract(int a,int b)
{
return a-b;
}
int fptrFunc(FptrOperation ptr,int a,int b)
{
return ptr(a,b);
}
//初始化
void initializeOperationsArray()
{
operations['+']=add;
operations['-']=sub;
}
//使用函数指针数组
int evaluateArray(char opcode,int num1,int num2)
{
FptrOperation operation;
operation = operations[opcode];
return operation(num1,num2);
}
NSLog(@"%d",fptrFunc(subtract,4, -4));
initializeOperationsArray();
NSLog(@"%d",evaluateArray('+',4,10));
NSLog(@"%d",evaluateArray('-',4,10));
//realloc调整数组长度(增加)
char *getLine(void)
{
const size_t sizeIncrement =10;
char *buffer = malloc(sizeIncrement);
char *currentPosition = buffer;
size_t maximumLength = sizeIncrement;
size_t lenght = 0;
int character;
if (currentPosition == NULL) {return NULL;}
while (1) {
character = fgetc(stdin);
if (character == '\n') {
break;
}
if (++lenght >= maximumLength) {
char *newBuffer = realloc(buffer, maximumLength +=sizeIncrement);
if (newBuffer == NULL) {
free(buffer);
return NULL;
}
currentPosition = newBuffer +(currentPosition -buffer);
buffer = newBuffer;
}
*currentPosition ++ = character;
}
*currentPosition = '\0';
return buffer;
}
//realloc调整数组长度(减少)
char *trim(char *phrase)
{
char *old = phrase;
char *new = phrase;
while (*old ==' ') {//跳过开头空白符:” helloworld"
old ++;
}
while (*old) {
*(new++) = *(old++);
}
*new = '\0';
return (char *)realloc(phrase,strlen(new)+1);
}
//display2DArray(matrix,2);
void display2DArray(int arr[][5],int rows)
{
for (int i =0; i <rows; i ++) {
for (int j =0; j<5; j++) {
printf("%d",arr[i][j]);
}
printf("\n");
}
}
//display2DArrayUnknownSize(&matrix[0][0],2,5);
void display2DArrayUnknowSize(int *arr,int rows,int cols)
{
for (int i =0; i <rows; i ++) {
for (int j =0; j<cols; j++) {
printf("%d",*(arr+ (i*cols)+j));
//printf("%d",(arr+i)[j]);
}
printf("\n");
}
}
//分配连续内存
void mallocContinuity(){
int rows =2;
int columns = 5;
int **matrix = (int **)malloc(rows *sizeof(int*));
matrix[0] = (int *)malloc(rows *columns *sizeof(int));
for (int i =1; i <rows; i ++) {
matrix[i] = matrix[0] +i *columns ;
}
// *(matrix +(i * columns)+j)= i*j;
}
//分配不连续内存
void mallocDiscontinuity(){
int rows =2;
int columns = 5;
int **matrix = (int **)malloc(rows *sizeof(int*));
for (int i =1; i <rows; i ++) {
matrix[0] = (int *)malloc(columns *sizeof(int));
}
}
//不规则数组
int (*(arr1[]))= {
(int[]){0,1,2},
(int[]){3,5,6},
(int[]){4,8,9},
// printf("%d",arr1[i][j]);
};
int (*(arr2[]))= {
(int[]){0,1,2,6},
(int[]){3,5},
(int[]){4,8,9}
};
//int rows = 0;
//for(int i =0,i<4;i++){printf(arr2[row][i]);}
//int rows = 1;
//for(int i =0,i<2;i++){printf(arr2[row][i]);}
//int rows = 2;
//for(int i =0,i<3;i++){printf(arr2[row][i]);}
- 函数指针数组与数组分配
- 指针与数组 内存分配
- 指针数组 数组指针 函数指针 堆中分配
- 函数指针、指针数组与数组指针
- 数组,函数与指针
- 函数 数组与指针
- 数组指针与指针数组 函数指针与指针函数
- 数组指针与指针数组 函数指针与指针函数
- 指针数组与数组指针、指针函数与函数指针
- 函数指针与指针函数、数组指针与指针数组
- 数组指针与函数指针
- 数组指针与函数指针
- 数组、指针与函数指针
- 指针数组、数组指针与指针函数、函数指针
- 指针函数与函数指针,指针数组及数组指针
- 指针函数与函数指针数组指针指针数组
- 指针malloc分配空间与数组区别
- 指针与数组的内存分配
- deep learning tutorial 翻译 (theano 学习笔记)
- spring框架--AOP
- 实例中this的困惑
- 小米手机刷机教程
- 写给新手程序员的一封信
- 函数指针数组与数组分配
- ajax SpringMVC如何返回json
- Mac note
- Zookeeper学习笔记:客户端程序分析一
- RQNOJ 能量项链
- innodb_max_dirty_pages_pct与检查点的关系
- android中对View的onMeasure()方法的理解
- HDU1495 非常可乐
- leetcode系列(75)Delete Node in a Linked List